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
悬赏问题
- ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
- ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
- ¥20 软件测试决策法疑问求解答
- ¥15 win11 23H2删除推荐的项目,支持注册表等
- ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
- ¥15 qt6.6.3 基于百度云的语音识别 不会改
- ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
- ¥15 神经网络怎么把隐含层变量融合到损失函数中?
- ¥15 lingo18勾选global solver求解使用的算法
- ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行