题目水仙花数是指该N位数的各位的N次方之和等于其本身;
先写出较为简单的三位水仙花数
代码如下:

#include<stdio.h>
int main()
{int i,t,n,sum;for(i = 100; i < 1000; ++i) {sum = 0;n = i;while(n) {t = n % 10;sum += t * t * t;n /= 10;}if(sum == i) printf("%d ",sum);}printf("\n");return 0;
}

运行结果:

153 370 371 407


Process exited after 0.1523 seconds with return value 0
请按任意键继续. . .

再尝试n位数:

#include<stdio.h>
int main()
{int n;scanf("%d",&n);//n=3;int first =1;int i=1;while(i<n){first *=10;i++;}//printf("first=%d\n",first);//检查first是否符合需求 i=first;while(i<first*10){        //遍历100-999 int t=i;int sum=0;do{                   //do while循环,0无影响 int d = t%10;t/=10;int p=d;int j=1;while (j<n){      //求个位数的n次 p*=d;j++;}sum+=p;}while(t>0);if(sum==i){printf("%d\n",i);}i++;} return 0;}

改进

#include<stdio.h>
#include<math.h>
int main(){int n,i,j,temp,item,sum;scanf("%d",&n); if(n==7) {    // 由于超时,为过检测点设置特殊点,需改进 printf("1741725\n");    printf("4210818\n");    printf("9800817\n");    printf("9926315\n");}else{for(i=pow(10,n-1);i<pow(10,n);i++){     //min=pow(10,n-1);max=pow(10,n)-1;item = i;sum=0;                 //每次循环都要使sum先归零; for(j=1;j<=n;j++){temp=item%10;sum+=pow(temp,n);item=item/10;}if(sum==i){printf("%d\n",i);}}        }return 0;
}

再次改进,自定义pow()函数取代调用math.h库

#include<stdio.h>
int pow(int a,int n);
int main(){int n,i,j,temp,item,sum;scanf("%d",&n); for(i=pow(10,n-1);i<pow(10,n);i++){    item = i;sum=0;                for(j=1;j<=n;j++){temp=item%10;sum+=pow(temp,n);item=item/10;}if(sum==i){printf("%d\n",i);}}      return 0;
}
int pow(int a,int n){int i,p=1;for(i=1;i<=n;i++){p*=a;}return p;
}

【C语言】(百合花)水仙花数的算法思考习题4-6 水仙花数相关推荐

  1. 课程教学c语言遇到的问题,C语言教学中的几点思考

    C语言教学中的几点思考 马稳 (西安科技大学计算机学院,陕西.西安,710054) 摘要: 本文针对作者在<C语言程序设计>教学常遇到的一些问题作了思考,从教学中使用的教学手段.教学方法和 ...

  2. 【每日算法】C语言8大经典排序算法(2)

    接上文--->[每日算法]C语言8大经典排序算法(1) 二.插入类排序 插入排序(Insertion Sort)的基本思想是:每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子文件中 ...

  3. 数据结构源码笔记(C语言):置换-选择算法

    //实现置换-选择算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<std ...

  4. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

  5. Algorithm:C++语言实现之队列相关算法(最短路径条数问题、拓扑排序)

    Algorithm:C++语言实现之队列相关算法(最短路径条数问题.拓扑排序) 目录 队列 1.最短路径条数问题 2.拓扑排序 队列 1.最短路径条数问题

  6. Algorithm:C++语言实现之链表相关算法(单链公共结点问题、一般LCA、括号匹配、最长括号匹配、逆波兰表达式Reverse Polish Notation、直方图矩形面积、收集雨水问题)

    Algorithm:C++语言实现之链表相关算法(单链公共结点问题.一般LCA.括号匹配.最长括号匹配.逆波兰表达式Reverse Polish Notation.直方图矩形面积.收集雨水问题) 目录 ...

  7. Algorithm:C++语言实现之贪心法算法相关问题

    Algorithm:C++语言实现之贪心法算法相关问题 目录 一.贪心法 一.贪心法 1.LIS的算法分析

  8. Algorithm:C++语言实现之链表相关算法(链表相加、链表的部分翻转、链表划分、链表去重、重复元素全部删除)

    Algorithm:C++语言实现之链表相关算法(链表相加.链表的部分翻转.链表划分.链表去重.重复元素全部删除) 目录 一.链表 1.1.链表相加 1.2.链表相加 2.1.链表的部分翻转 2.2. ...

  9. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

最新文章

  1. 存储过程中SELECT与SET对变量赋值
  2. R语言case_when函数和cases函数实战
  3. 论大脑的运行-万有引力模型
  4. 蚂蚁金服面试3+2次,最终有惊无险通过!
  5. vue从入门到精通之进阶篇(四)模块化工具 webpack
  6. java获取cpu核数_vn.py社区精选12 - 策略参数优化,你需要懂得压榨CPU!
  7. gc日志一般关注什么_JVM(23)JVM的Full GC日志
  8. ## CSP 201809-2 买菜(C语言)(100分)
  9. 递归怎么理解 php,求php一段递归代码的理解
  10. NYOJ题目96 n-1位数
  11. DSP 6678的中断系统
  12. java实现正态分布累积分布,标准正态分布变量的累积概率分布函数
  13. linux系统print命令,Linux系统命令大全
  14. R语言学习记录之安装caret包与jupyter关联R内核
  15. 中兴通讯项目管理发展历程经验总结
  16. 女人最该记得的100本书的100句话
  17. 提供一站式AI口语评测能力,声网AI互动课堂全新升级
  18. 让命令不尽然history历史纪录的一种方法
  19. 温州市学习摩托车驾照攻略
  20. Cocos2d-x 3

热门文章

  1. python向量计算库教程_python中numpy基础学习及进行数组和矢量计算
  2. 搭建es+kabana
  3. 广告过滤算法实现及优化
  4. Android 音乐播放器的开发教程(六)service的运用及音乐列表点击播放 ----- 小达
  5. 常见帧率 与 帧率运用
  6. 聊一聊最近比较火的多云管理平台
  7. 微信小程序第三方框架
  8. 大数据开发:基于Hadoop的数据分析平台
  9. 那些脑残粉请闭嘴好吗,这不是硬科幻
  10. Vue.js 使用cordova camera插件调取相机