1019 数字黑洞 (20 分)
发布日期:2021-06-29 22:19:43 浏览次数:2 分类:技术文章

本文共 1218 字,大约阅读时间需要 4 分钟。

1019 数字黑洞 (20 分)

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。

例如,我们从6767开始,将得到

7766 - 6677 = 1089

9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。

输入格式:

输入给出一个 (0,10
​4
​​ ) 区间内的正整数 N。

输出格式:

如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。

输入样例 1:

6767
输出样例 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
输入样例 2:
2222
输出样例 2:
2222 - 2222 = 0000
#include<stdio.h>//测试点0,1分别是输入样例1,和输入样例2;
int main()
{
int n,a[10]={0},k=0,j,temp,i,min=0,max=0;
scanf("%d",&n);
while(1)
{
min=0;
max=0;
k=0;
do
{
a[k++]=n%10;
n=n/10;
}while(n!=0);
//测试点二,需要对数组的四个元素都要赋值;没有的补零;
if(k= =4) a[4]=0;
else if(k= =3) a[3]=a[4]=0;
else if(k= =2) a[2]=a[3]=a[4]=0;
else if(k= =1) a[1]=a[2]=a[3]=a[4]=0;
for(i=0;i<3;i++)//此处不可以写k-1;测试点3,4;
{
for(j=i+1;j<4;j++)//此处不可以写k;测试点3,4;
{
if(a[i]>a[j])//升序排列;
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
max=a[3]*1000+a[2]*100+a[1]*10+a[0];
min=a[0]*1000+a[1]*100+a[2]*10+a[3];
printf("%04d - %04d = %04d\n",max,min,max-min);
n=max-min;
if(n= =6174||n==0||a[0]==a[1]==a[2]==a[3]) break;
}
}

转载地址:https://dingshijie.blog.csdn.net/article/details/87426510 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:1018 锤子剪刀布 (20 分)
下一篇:1003 我要通过! (20 分)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月13日 02时13分40秒