一道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;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式