一道C语言题,跪求大神解答,我需要的是思路,谢谢!

设数组的每个元素只存储0~9的数,把该数组的前n个整数的排列看作是一个n位的长整数的一种表示。现要求编写程序,对数组中的元素作调整,产生一个新的排列,使新排列表示的长整数比调整前的长整数大(如果可能的话),但又是所有更大的表示中最小的。例如,a[]={3, 2, 6, 5, 4, 1},则更大又是最小的排列为{ 3, 4, 1, 2, 5, 6}。

从末尾向前数第一个减小的数a[position]

在a[position]到a[N]中找出比a[position]大的最小的数a[index]

a[position]和a[index]交换位置

a[position+1]到a[N]从小到大排列

#include<stdio.h>
#define N 6
int Find(int a[]);
int Arrange(int a[],int i);
int main()
{
int i,position,value,index;
int a[10]={3,2,6,5,4,1};
position=Find(a);
if(position==-1)
        retuen -1;
value=a[position+1];
for(i=position;i<N;i++)
{
if(a[i]>a[position]&&a[i]<value)
{
index=i;
value=a[i];
}
}
a[index]=a[position];
a[position]=value;
Arrange(a,position);
for(i=0;i<N;i++)
printf("%d",a[i]);
printf("\n");
}
int Find(int a[])
{
int i;
for(i=N-2;i>=0;i--)
{
if(a[i]<a[i+1])
return i;
}
return -1;
}
int Arrange(int a[],int i)
{
int j,k,temp;
for(j=i+1;j<N;j++)
for(k=j;k<N;k++)
if(a[j]>a[k])
{
temp=a[j];
a[j]=a[k];
a[k]=temp;
}
return 0;
}

温馨提示:答案为网友推荐,仅供参考
相似回答