1)输入一个 n 位的数,先判断是否为水仙花数。如果是水仙花数,则调整这个
n 位数的各位数字的顺序,获取相同的 n 个数字所能组成的所有数,并按数
的大小进行排序后,找到其中最小的那个数。
2)可以求出所有 n 位数中的水仙花数,并按大小排序显示在界面上。
编写程序,实现水仙花数的计算
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2021-11-19 09:50关注
代码如下:
#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无用 2
悬赏问题
- ¥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地图和异步函数使用