关于数学黑洞6174(c程序)拜托各位大神
假设有一个各位数字各不相同的四位数,把所有数字从大到小排序后得到A,从小到大排序后得到B,然后用A-B替换原来这个数,并且继续操作。例如:从1234出发,一次可以得到43...
假设有一个各位数字各不相同的四位数,把所有数字从大到小排序后得到A,从小到大排序后得到B,然后用A-B替换原来这个数,并且继续操作。例如:从1234出发,一次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174。有趣的是,7641-1467=6174,回到了他自己 要输出变成6174的步数 请看我写的程序,为什么无法运行 #include<stdio.h> #include<stdlib.h> main() { int m,n,s,j,k; int a[3]; k=0; printf("Please type the number:\n"); scanf("%d",&n); if((n%1111==0)&&(n>9999)&&(n<1000)) { printf("Error!"); goto end; } s=n; while(s!=6174) { k++; for(j=0;j<=3;j++) { a[j]=s%10; s=s%10; } if(a[0]>a[1]) { m=a[0]; a[0]=a[1]; a[1]=m; } if(a[0]>a[2]) { m=a[0]; a[0]=a[2]; a[1]=m; } if(a[0]>a[3]) { m=a[0]; a[0]=a[3]; a[3]=m; } if(a[1]>a[2]) { m=a[1]; a[1]=a[2]; a[2]=m; } if(a[1]>a[3]) { m=a[1]; a[1]=a[3]; a[3]=m; } if(a[2]>a[3]) { m=a[2]; a[2]=a[3]; a[3]=m; } s=a[3]*1000+a[2]*100+a[1]*10+a[0]-a[0]*1000-a[1]*100-a[2]*10-a[3]; } printf("%d %d",n,k); end:system("pause"); return 0; }
展开
1个回答
展开全部
问题出在这一步: for(j=0;j<=3;j++) { a[j]=s%10; s=s%10; } 你没理解求余符号的运算结果。 假如这里s = 1234 , 那么第一次循环,a[0] = 1234 % 10 = 4; s = 1234 % 10 = 4; 那么这个循环接下来还有作用吗? 数组a的元素都是4. 当然对于输入数组的范围要求也有问题,因为题目要求的是各位数字各不相同,而你的判断语句if((n%1111==0)&&(n>9999)&&(n<1000)) 是没有任何功能的,因为哪会有一个整数既大于9999又小于1000呢? 还有下面对数组的排列,有太多方法,每一种都比你的简单。试想,如果这个不是4位数,而是40位,你这种写法,那岂不是能写出几千行的程序?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询