ssmyego 2021-11-19 07:58 采纳率: 50%
浏览 101
已结题

编写程序,实现水仙花数的计算

1)输入一个 n 位的数,先判断是否为水仙花数。如果是水仙花数,则调整这个
n 位数的各位数字的顺序,获取相同的 n 个数字所能组成的所有数,并按数
的大小进行排序后,找到其中最小的那个数。
2)可以求出所有 n 位数中的水仙花数,并按大小排序显示在界面上。

  • 写回答

2条回答 默认 最新

  • 关注

    代码如下:

    #include <stdio.h>
    #include <math.h>
    #include <process.h>
    
    //冒泡排序
    void bubble_sort(int a[],int n)
    {
        int i,j,t;
        for (i=0;i<n-1;i++)
        {
            for (j=0;j<n-1-i;j++)
            {
                if(a[j] > a[j+1])  //从小到大,升序
                {
                    t = a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                }
            }
        }
        return ;
    }
    //判断是否是水仙花
    int isSxh(int n,int p[],int *ws)
    {
        int s = 0;
        int a = n;
        int d = 0;
        int i = 0;
        while(a>0)
        {
            int d = a%10;
            p[i] = d;
            s += (d*d*d);
            a = a/10;
            i++;
        }
        *ws = i;
        if(s == n)
            return 1;
        else
            return 0;
    }
    int main()
    {
        int n,s=0,big=0;
        int p[20],i,ws=0;
        scanf("%d",&n);
        if(!isSxh(n,p,&ws)) //不是水仙花数
        {
            printf("不是水仙花数\n");
            return 0;
        }
        //处理水仙花数
        bubble_sort(p,ws); //所有数按照从小到大排序
    
        if(ws==3)
        {
            printf("%d ",p[0]*100+p[1]*10+p[2]);
            printf("%d ",p[0]*100+p[2]*10+p[1]);
            printf("%d ",p[1]*100+p[0]*10+p[2]);
            printf("%d ",p[1]*100+p[2]*10+p[0]);
            printf("%d ",p[2]*100+p[0]*10+p[1]);
            printf("%d\n",p[2]*100+p[1]*10+p[0]);
        }
        
    
    
        s=0;
        for(i=0;i<ws;i++)
            s = s*10 + p[i];
        printf("最小数是%d\n",s);
        s = pow(10.0,ws-1); //n位最大数
        big = pow(10.0,ws)-1; //n位最小数
        //变量从最大的数到最小的数,并找出其中的水仙花数
        for (i=big;i>=s;i--)
        {
            if (isSxh(i,p,&ws))
            {
                printf("%d ",i);
            }
        }
        system("pause");
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月11日
  • 已采纳回答 12月3日
  • 创建了问题 11月19日

悬赏问题

  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用