m0_74118720 2022-10-09 04:41 采纳率: 92.3%
浏览 109
已结题

4 5关于#c语言#的问题:任何各位数字不全相同

验证命题:任何各位数字不全相同的三位正整数经以下变换后均能变为495,称495为三位整数的黑洞数。
变换步骤:对于任意一个各位数字不全相同三位正整数,将组成该整数的3个数字重新组合分别生成一个最大数和最小数,用最大数减去最小数得到一个新的三位数;再对新的三位数重复上述操作,最多重复7次。
编写程序,接收键盘输入的一个三位正整数,判断各位数字是否不全相同,若不全相同则实施以上变换(不超过7次),输出每步变换后得到的三位整数。
【测试数据】
输入486时应输出:486 396 594 495
输入591时应输出:591 792 693 594 495
输入其他任意的三位数再做验证。

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2022-10-09 08:29
    关注

    既然是三位整数,用n/100,n/10%10和n%10就可以得到三位数字进行比较就行

    #include <stdio.h>
    void fun(int n,int *a,int *b,int *c)
    {
        *a = n/100;
        *b = n/10%10;
        *c = n%10;
    }
    
    int isSame(int n)
    {
        int a,b,c;
        fun(n,&a,&b,&c);
        if(a==b && b==c)
            return 1;
        return 0;
    }
    
    void getnew(int *n)
    {
        int a,b,c,max,min;
        fun(*n,&a,&b,&c);
        if(a>b)
        {
            max = a;
            min = b;
        }
        else
        {
            max = b;
            min = a;
        }
        if(c>max)
            max = c;
        if(c<min)
            min = c;
        *n = max*100 + min - min*100-max;
    }
    
    int main()
    {
        int n,count=0;
        scanf("%d",&n);
        while(isSame(n))
        {
            printf("三位数字不能完全相同,请重新输入:");
            scanf("%d",&n);
        }
        while(n!=495 && count <= 7)
        {
            count++;
            printf("%d ",n);
            getnew(&n);
        }
        if(count<=7)
            printf("%d\n",495);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月9日
  • 已采纳回答 10月9日
  • 创建了问题 10月9日

悬赏问题

  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数