郑州轻工业大学oj题解(c语言)1096:水仙花数(函数专题)

作者 : 开心源码 本文共1903个字,预计阅读时间需要5分钟 发布时间: 2022-05-13 共250人阅读

今天给大家详情一道函数题。水仙花数的进阶函数专题。
水仙花数在OJ的题目里也算的上是趣味性比较强,相对难度比较简单的题目了。大家在看本文之前也可以先回顾一下1027:水仙花数的题解。


本题相对难度较高,假如对函数还不够了解的同学可以选择放弃和其余同学一起学习。

1096: 水仙花数(函数专题)

– 题目形容

春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,他是这样定义的:
“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比方:153=13+53+33。
现在要求输出所有在m和n范围内的水仙花数。
要求程序定义一个narcissus()函数和一个main()函数,narcissus()函数判断一个整数n能否为水鲜花数,其他功能在main()函数中实现。
int narcissus(int n)
{
//判断n能否为水仙花数, 若是函数返回1,否则返回0
}
对于C/C++代码的提交,本题要求必需通过定义narcissus函数和main函数实现,否则,提交编译错误,要提交完整的程序。

– 输入

输入数据有多组,每组占一行,包括两个整数m和n(100<=m<=n<=999)。

– 输出

对于每个测试实例,要求输出所有在给定范围内的水仙花数,就是说,输出的水仙花数必需大于等于m,并且小于等于n,假如有多个,则要求从小到大排列在一行内输出,之间用一个空格隔开;
假如给定的范围内不存在水仙花数,则输出no;
每个测试实例的输出占一行。

#include<stdio.h> int narcissus(int n)  {  int a,b,c;    a = n / 100;    b = n / 10 % 10;    c = n % 10 % 10;   if(n==a*a*a+b*b*b+c*c*c)    return 1;   else    return 0; }int main(){    int m, n, i, find=0;    while(scanf("%d%d", &m, &n)!=EOF){        find=0;        for(i=m; i<=n; i++){        if( narcissus(i)==1 ){            find++;            if(find==1)printf("%d", i);            else printf(" %d", i);        }    }    if(find==0){    printf("no");    }    printf("\n");   }    return 0;}

– 代码解析:

本题的难度应该不在函数的描写上,而在main()函数对能否存在水仙花数的判断上,下面的解析会有轻重,假如对某段代码不够理解的同学可以直接在下面评论区提出。

  • 首先直接从main函数讲起,待需要进行判断水仙花数时再解释函数。
  • 根据题目要求,输入数据有多组,则这里显著需要用到循环进行输入,数据有多组说明循环的次数不确定,所以这里适用于1079的多实例例子,假如不记得了的同学可以回顾一下之前的题解。
  • 根据题目要求的m,和n分别是区间的两个点,这里要求的是我们找出这个区间内的水仙花数,所以,我们还需要再写一个循环,寻觅位于这个区间的水仙花数。
  • 既然这里需要寻觅水仙花数了,那么就需要我们开始写计算过程了。因为题目是函数专题,我们这里把计算过程写进函数中。这里定义的narcissus() 函数题目要求我们判断:判断n能否为水仙花数, 若是函数返回1,否则返回0。因而,我们在使用与1027同样的判断过程后,让其在输出后再次判断,假如是水仙花数则返回1,假如不是则返回0。
  • 函数写完后,我们则要在main函数()中使用他了。根据题目要求我们目的是要输出水仙花数或者者输出0。那么我们首先用函数进行判断。由于函数内部已经进行过水仙花数的判断了。我们直接根据判断结果进行输出就可。
  • 假如函数返回1,则输出这个数;假如函数一律返回0,则输出no。要注意这两句话的重点。要一律数判断完后再去判断能否没有水仙花数。所以这里我们增加一个参数来作为判断,判断这个区间能否有水仙花数,当我们判断到有一个数是水仙花数了,就把负责记录判断的数+1。
  • 待我们所有的数判断完后,假如没有水仙花数,则用来判断的参数find仍为初始值0,判断完输出“no”就可。
注意的易错点:

谈易错点前先给大家看张截图。。。

做题记录

1.注意空格。每个水仙花数之间要有空格,不能直接连续输出
2.注意判断没有水仙花数肯定要在判断水仙花数的循环结束后再判断,不然会重复输出多个no。
3.整个while循环走完后记得加个换行。。。不然会导致下一次区间判断的值与上次重叠导致答案错误。
4.每次判断水仙花数的循环后,判断的值肯定要归初始值0。不然会影响下次循环的判断。

这次的教程比较长比较复杂,但也自认相比照较详细了,看完一定会有不少收获,希望大家都能耐心看完。另外看完后请右下方点个赞支持一下。码字不易~

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 郑州轻工业大学oj题解(c语言)1096:水仙花数(函数专题)

发表回复