6174 问题

来源:互联网 发布:斗鱼王师傅c语言视频 编辑:程序博客网 时间:2024/06/06 03:23

问题:假设有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大排序后得到b,然后用 a-b 替换原来这个数,并且继续操作。

例如:1234出发,依次得到

4321-1234=3087;

8730-378 = 8352;

8532- 2358 = 6174;

7641-1467 = 6174;

要求:最多循环1000次

样例输入:1234

样例输出:1234->3087->8352->6174-6174;

附上我的代码,学的渣,写的程序也比较龊!!!!

#include <stdio.h>int* sort(int f[],int len) //大到小的排序 {int c =0;for(int i=0; i<len;++i){for(int j=i+1;j<len;++j){if(f[i] <f[j]){c = f[i];f[i] = f[j];f[j] = c;}}}return f;}int convert(int f[],int k){int *p = NULL;int m=0;f[0] = k/1000;  //把这个数放入数组 f[1] = k%1000/100;f[2] = k%100/10;f[3] = k%10;p = sort(f,4);m=(*p*1000+*(p+1)*100+*(p+2)*10+*(p+3))- ( *(p+3)*1000+*(p+2)*100+*(p+1)*10+*p);return m;}int main(){int f[4] = {0};int *p = NULL;int n = 0;int k = 0;int count = 0;printf("请输入一个互不相同的四位数:");scanf("%d",&n);printf("%d->",n);k = n;while(k!=6174 && count<=1000){k = convert(f,k);printf("%d->",k);++count;}if(6174==k)printf("%d",6174);return 0;}


总结:题型不难,就是中间有个类似递归的,搞得有点糊涂,还有就是在程序中用了传地址的方法,显得比较易懂,但是也是容易出错的地方,这是应该注意的地方。







0 0