一道C语言题,跪求大神解答,我需要的是思路,谢谢! 10
设数组的每个元素只存储0~9的数,把该数组的前n个整数的排列看作是一个n位的长整数的一种表示。现要求编写程序,对数组中的元素作调整,产生一个新的排列,使新排列表示的长整数...
设数组的每个元素只存储0~9的数,把该数组的前n个整数的排列看作是一个n位的长整数的一种表示。现要求编写程序,对数组中的元素作调整,产生一个新的排列,使新排列表示的长整数比调整前的长整数大(如果可能的话),但又是所有更大的表示中最小的。例如,a[]={3, 2, 6, 5, 4, 1},则更大又是最小的排列为{ 3, 4, 1, 2, 5, 6}。
展开
2015-04-28
展开全部
从末尾向前数第一个减小的数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;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询