请教一下,这个怎样做
先输入任意一个数,然后输出一个比这个数大的最小翻转数,例如5可以变成2,6可以变成9.请问这个程序应该怎样编,要用c语言编,应该有人会吧
/*------------------------------------------------------------------------------ 先输入任意一个数,然后输出一个比这个数大的最小翻转数,例如5可以变成2, 6可以变成9. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 好象看过一个题目:一个人两只手各拿着一块电子记分牌,但他很糊涂,他不记得 现在的分数应该是多少了。由于电子记分牌有些数字翻转、颠倒后又成为了一个新的数 字,所以他就把它们翻来翻去,把现在的分数定为大于手中现在分数的最小的数。 由于本人太笨,所以想不出太好的算法,也就只能把两位数分别颠来倒去。渴望有 高手写个高明的算法来学习学习。 现贴出最笨的代码,就算是抛砖引玉罢 。 ------------------------------------------------------------------------------*/ #include<stdio.h> int fz(int a) { if(a==2) return 5; else if(a==5) return 2; else if(a==6) return 9; else if(a==9) return 6; else return a; } int input() { int a; while(1) { printf("input a:\n"); scanf("%d",&a); if(a<10||a>99) printf("error\n"); else return a; } } void sort(int a[],int n) { int i,j,tmp; for(i=0;i<=n;++i) for(j=i+1;j<=n;++j) if(a[i]>a[j]) { tmp=a[i]; a[i]=a[j]; a[j]=tmp; } } void print(int a[],int n,int num) { int i; for(i=0;i<=n;++i) printf("%d ",a[i]); printf("\n"); for(i=0;i<=n;++i) if(num<a[i]) break; if(i<n) printf("最小翻转数为:%d\n",a[i]); else printf("这个数没有最小翻转数\n"); } int main(void) { int a,n=0; int a1,a2,_a1,_a2; int num[8]; a=input(); a1=a/10,a2=a%10; _a1=fz(a1); _a2=fz(a2); num[0]=a1*10+a2; num[1]=a2*10+a1; num[2]=_a1*10+a2; num[3]=a2*10+_a1; num[4]=_a2*10+a1; num[5]=a1*10+_a2; num[6]=_a1*10+_a2; num[7]=_a2*10+_a1; sort(num,7); print(num,7,a); return 0; }