为了账号安全,请及时绑定邮箱和手机立即绑定

数学黑洞c++编程题,用数组排列过后怎么循环下去,有没有实例,谢谢?

数学黑洞c++编程题,用数组排列过后怎么循环下去,有没有实例,谢谢?

C C++
柔情似水的眼眸3611166 2016-07-20 16:25:18
“数学黑洞”:任意一个4位自然数,,,形成一个最大数和一个最小数,之后,两数相减,其差仍然为一个自然数。重复进行上述运算,会发现一个神秘的数。请找出该神秘数,并对所有4位自然数进行验证。
查看完整描述

1 回答

?
源小猿

TA贡献9条经验 获得超1个赞

#include <stdio.h>

int main(void)
{
    int a=0;  //用于获取输入的数字
    int b[4]={0};  //用于保存每个位
    int c=0;  //用于排序时暂存
    int max=0,min=0;  //保存最大最小值
   
    printf("请输入一个四位数字:");
    scanf("%d",&a);
   
    if(a>=1000&&a<=9999)  //判断输入的值是否过大或过小
    {
    while(a>=10)
    {
    b[0]=a/1000;
    b[1]=(a%1000)/100;
    b[2]=(a%100)/10;
    b[3]=a%10;
   
    for (int i=0;i<3;i++)  //由小到大排序
    {
        for (int j=i+1;j<4;j++)
        {
            if (b[i]>b[j])
            {
                c=b[i];
                b[i]=b[j];
                b[j]=c;
            }
        }
    }
    min=b[0]*1000+b[1]*100+b[2]*10+b[3];
    max=b[3]*1000+b[2]*100+b[1]*10+b[0];
   
    a=max-min;  //差值保存到a中便于while检查
    }
    }
    printf("这个数字为:%d",a);
    return 0;
}

这是我的看法,我没有编译,编译器好像出了点小问题,你自己试试看,你说测试所有四位数字的话就加一个for循环,挨个把值附给a应该就可以吧

查看完整回答
反对 回复 2016-07-20
  • 柔情似水的眼眸3611166
    柔情似水的眼眸3611166
    好的!谢谢~
  • 源小猿
    源小猿
    好像有点问题,while的条件判断表达式不能这样,会无限循环,还有那个取每位数的地方,那里应该是复制出问题了,反正就是先取余再除,就可以得到每位数值,至于while表达式,可以再声明一个变量保存上一次计算的差值,然后while来检查两次差值是否相同,相同就退出循环就可以了吧
  • 源小猿
    源小猿
    好像有点问题,while的条件判断表达式不能这样,会无限循环,还有那个取每位数的地方,那里应该是复制出问题了,反正就是先取余再除,就可以得到每位数值,至于while表达式,可以再声明一个变量保存上一次计算的差值,然后while来检查两次差值是否相同,相同就退出循环就可以了吧
  • 1 回答
  • 0 关注
  • 1744 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信