C语言的高手,来考试啊~~~

验证卡布列克运算。任意的一个四位数,只要它们各个位上数字不全相同,就有这样的规律,其中三个步骤设计3个函数实现:
a)将组成这个四位数的四个数字由大到小排列,形成由这四个数字构成的最大四位数。
b) 将组成这个四位数的四个数字由小到大排列,形成由这四个数字构成的最小四位数。
c) 求两个数的差,得到一个新的四位数。
重复以上过程,最后得到的结果总是6174.
(写程序步骤,即其各个函数的用法,注:是一个健全的程序)

#include"stdio.h"
main()
{
int a[4],j,i,aa,b,c,d,k=0,l=0;

for(aa=0;aa<7;aa++)
for(b=aa+1;b<8;b++)
for(c=b+1;c<9;c++)
for(d=c+1;d<10;d++)
{i=aa*1000+b*100+c*10+d;k++;/*这个模块是算出各个位上的数字不同的数*/

for(j=0;j<10;j++){i=kblk(i);if(i==6174){l++;break;}}}
printf("%d %d",k,l);/*k,l是为了验证是不是的数有210个*/
getch();
}

void bubble(s,n)/*冒泡法排序对数组s前n项排列(小到大)*/
int s[],n;
{
int i,j,k;
for(i=n;i>1;i--)
for(j=0;j<n-1;j++)
if(s[j]>s[j+1]){k=s[j];s[j]=s[j+1];s[j+1]=k;}
}

breakup(s,i) /*分解i,并存入数组a中*/
int s[],i;
{
s[0]=i/1000;
s[1]=i/100%10;
s[2]=i/10%10;
s[3]=i%10;
}

kblk(int i) /*卡布列克(作差)过程*/
{
int a[4],s1,s2;
breakup(a,i);
bubble(a,4);
s1=a[0]*1000+a[1]*100+a[2]*10+a[3];
s2=a[3]*1000+a[2]*100+a[1]*10+a[0];
printf("|%4d-%4d|=%4d\n",s1,s2,s2-s1);
return(s2-s1);
}

实际验证c(10,4)=10*9*8*7/24个数就可以了,包括以0为开头的"四位数"
----------------------------------------
顺便送一下自己的博客:http://kinglufei.blog.163.com/
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜