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

今天给大家介绍一道函数题。水仙花数的进阶函数专题。
水仙花数在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。不然会影响下次循环的判断。

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容