今天給大家介紹一道函數(shù)題言秸。水仙花數(shù)的進(jìn)階函數(shù)專題。
水仙花數(shù)在OJ的題目里也算的上是趣味性比較強(qiáng),相對難度比較簡單的題目了止潘。大家在看本文之前也可以先回顧一下1027:水仙花數(shù)的題解搁拙。
本題相對難度較高秒梳,如果對函數(shù)還不夠理解的同學(xué)可以選擇放棄和其他同學(xué)一起學(xué)習(xí)。
1096: 水仙花數(shù)(函數(shù)專題)
- 題目描述
春天是鮮花的季節(jié)箕速,水仙花就是其中最迷人的代表酪碘,數(shù)學(xué)上有個水仙花數(shù),他是這樣定義的:
“水仙花數(shù)”是指一個三位數(shù)盐茎,它的各位數(shù)字的立方和等于其本身兴垦,比如:153=13+53+33。
現(xiàn)在要求輸出所有在m和n范圍內(nèi)的水仙花數(shù)庭呜。
要求程序定義一個narcissus()函數(shù)和一個main()函數(shù)滑进,narcissus()函數(shù)判斷一個整數(shù)n是否為水鮮花數(shù),其余功能在main()函數(shù)中實現(xiàn)募谎。
int narcissus(int n)
{
//判斷n是否為水仙花數(shù)扶关, 若是函數(shù)返回1,否則返回0
}
對于C/C++代碼的提交数冬,本題要求必須通過定義narcissus函數(shù)和main函數(shù)實現(xiàn)节槐,否則,提交編譯錯誤拐纱,要提交完整的程序铜异。
- 輸入
輸入數(shù)據(jù)有多組,每組占一行秸架,包括兩個整數(shù)m和n(100<=m<=n<=999)揍庄。
- 輸出
對于每個測試實例,要求輸出所有在給定范圍內(nèi)的水仙花數(shù)东抹,就是說蚂子,輸出的水仙花數(shù)必須大于等于m,并且小于等于n沃测,如果有多個,則要求從小到大排列在一行內(nèi)輸出食茎,之間用一個空格隔開;
如果給定的范圍內(nèi)不存在水仙花數(shù)蒂破,則輸出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;
}
- 代碼解析:
本題的難度應(yīng)該不在函數(shù)的描寫上别渔,而在main()函數(shù)對是否存在水仙花數(shù)的判斷上附迷,下面的解析會有輕重,如果對某段代碼不夠了解的同學(xué)可以直接在下面評論區(qū)提出哎媚。
- 首先直接從main函數(shù)講起喇伯,待需要進(jìn)行判斷水仙花數(shù)時再解釋函數(shù)。
- 根據(jù)題目要求拨与,輸入數(shù)據(jù)有多組艘刚,則這里明顯需要用到循環(huán)進(jìn)行輸入,數(shù)據(jù)有多組說明循環(huán)的次數(shù)不確定截珍,所以這里適用于1079的多實例例子,如果忘記了的同學(xué)可以回顧一下之前的題解箩朴。
- 根據(jù)題目要求的m岗喉,和n分別是區(qū)間的兩個點,這里要求的是我們找出這個區(qū)間內(nèi)的水仙花數(shù)炸庞,所以钱床,我們還需要再寫一個循環(huán),尋找位于這個區(qū)間的水仙花數(shù)埠居。
- 既然這里需要尋找水仙花數(shù)了查牌,那么就需要我們開始寫計算過程了。由于題目是函數(shù)專題滥壕,我們這里把計算過程寫進(jìn)函數(shù)中纸颜。這里定義的narcissus() 函數(shù)題目要求我們判斷:判斷n是否為水仙花數(shù), 若是函數(shù)返回1绎橘,否則返回0胁孙。因此,我們在使用與1027同樣的判斷過程后称鳞,讓其在輸出后再次判斷涮较,如果是水仙花數(shù)則返回1,如果不是則返回0冈止。
- 函數(shù)寫完后狂票,我們則要在main函數(shù)()中使用他了。根據(jù)題目要求我們目的是要輸出水仙花數(shù)或者輸出0熙暴。那么我們首先用函數(shù)進(jìn)行判斷闺属。因為函數(shù)內(nèi)部已經(jīng)進(jìn)行過水仙花數(shù)的判斷了慌盯。我們直接根據(jù)判斷結(jié)果進(jìn)行輸出即可。
- 如果函數(shù)返回1屋剑,則輸出這個數(shù)润匙;如果函數(shù)全部返回0,則輸出no唉匾。要注意這兩句話的重點孕讳。要全部數(shù)判斷完后再去判斷是否沒有水仙花數(shù)。所以這里我們添加一個參數(shù)來作為判斷巍膘,判斷這個區(qū)間是否有水仙花數(shù)厂财,當(dāng)我們判斷到有一個數(shù)是水仙花數(shù)了,就把負(fù)責(zé)記錄判斷的數(shù)+1峡懈。
- 待我們所有的數(shù)判斷完后璃饱,如果沒有水仙花數(shù),則用來判斷的參數(shù)find仍為初始值0肪康,判斷完輸出“no”即可荚恶。
注意的易錯點:
談易錯點前先給大家看張截圖。磷支。谒撼。
1.注意空格。每個水仙花數(shù)之間要有空格雾狈,不能直接連續(xù)輸出
2.注意判斷沒有水仙花數(shù)一定要在判斷水仙花數(shù)的循環(huán)結(jié)束后再判斷廓潜,不然會重復(fù)輸出多個no。
3.整個while循環(huán)走完后記得加個換行善榛。辩蛋。。不然會導(dǎo)致下一次區(qū)間判斷的值與上次重疊導(dǎo)致答案錯誤移盆。
4.每次判斷水仙花數(shù)的循環(huán)后悼院,判斷的值一定要歸初始值0。不然會影響下次循環(huán)的判斷咒循。
這次的教程比較長比較復(fù)雜樱蛤,但也自認(rèn)相對比較詳細(xì)了,看完肯定會有不少收獲剑鞍,希望大家都能耐心看完昨凡。另外看完后請右下方點個贊支持一下。碼字不易~