題目描述
對於乙個數大於1的整數n,把它的各個位的數求平方和,然後得到乙個數,再把這個數的各個位再求平方和,一直這麼做下去,如果最後得到的數是1,那麼我們就稱n是乙個快樂數,否則n就不是乙個快樂數。而不快樂數則會在計算中陷入無限迴圈(本題假定經過1000步計算後,依然不能得到1,則該數為不快樂數)。
如果乙個數既是快樂數,又是素數,那我們就稱這樣的數是快樂素數。
以數字7為例分析7是不是快樂素數。數字7是乙個素數,但是它是快樂數嗎?
7-7*7=49
49-4*4+9*9=97
97-9*9+7*7=130
130→1*1+3*3=10
10→1*1=1
所以它是快樂數。
對於這個問題,請編寫程式判斷乙個正整數是不是快樂素數。* 注:素數是指在大於1的自然數中,除了1和它本身以外不再有其他因數的自然數。*
時間限制:10s 空間限制:1000k
輸入描述:
n本題輸入樣例已確保n為(1,100] 區間內的乙個自然數。
輸出描述:
如果n是快樂素數,輸出計算過程(相鄰2個數字之間有1個空格,最後乙個數字的後面無空格);如果n不是快樂素數,輸出no前3步計算的結果序列(詳見樣例|2和樣例3,相鄰2個資料之間有1個空格,最後1個數字的後面無|空格,測試樣例能夠保證至少有3步)。
示例如下:
輸入:
樣例1:輸入:7
樣例2:輸入:11
樣例3:輸入:76
輸出:樣例1:輸出:7 49 97 130 10 1
樣例2:輸出:no 11 2 4 16
樣例3:輸出:no 76 85 89 145
源**#include
void
kabunka
(int n)}if
(count==1)
//說明n不是素數,那也不可能是快樂素數。
if(count1==1)
//1位
if(count2==1)
printf
("%d"
,n2t*n2t)
;else
if(count2==2)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10)
*(n2t/10)
));else
if(count2==3)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10%
10)*(n2t/10%
10)+(n2t/
100)
*(n2t/
100)))
;}else
if(count1==2)
//2位
if(count2==1)
printf
("%d"
,n2t*n2t)
;else
if(count2==2)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10)
*(n2t/10)
));else
if(count2==3)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10%
10)*(n2t/10%
10)+(n2t/
100)
*(n2t/
100)))
;}else
if(count1==3)
//3位
if(count2==1)
printf
("%d"
,n2t*n2t)
;else
if(count2==2)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10)
*(n2t/10)
));else
if(count2==3)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10%
10)*(n2t/10%
10)+(n2t/
100)
*(n2t/
100)))
;}}}
if(count==0)
//說明n是乙個素數,但不一定是個快樂素數。
n=sum;
count3++;}
//進**況統計
if(count3>=
1000
&&sum!=1)
//是素數但不是快樂素數
/*同最上方一致*/
if(count1==1)
if(count2==1)
printf
("%d"
,n2t*n2t)
;else
if(count2==2)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10)
*(n2t/10)
));else
if(count2==3)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10%
10)*(n2t/10%
10)+(n2t/
100)
*(n2t/
100)))
;}else
if(count1==2)
if(count2==1)
printf
("%d"
,n2t*n2t)
;else
if(count2==2)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10)
*(n2t/10)
));else
if(count2==3)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10%
10)*(n2t/10%
10)+(n2t/
100)
*(n2t/
100)))
;}else
if(count1==3)
if(count2==1)
printf
("%d"
,n2t*n2t)
;else
if(count2==2)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10)
*(n2t/10)
));else
if(count2==3)
printf
("%d",(
(n2t%10)
*(n2t%10)
+(n2t/10%
10)*(n2t/10%
10)+(n2t/
100)
*(n2t/
100)))
;}}if
(sum==1)
//是快樂素數
if(sum1!=1)
printf
("%d "
,sum1)
; ntk=sum1;
sum1=0;
}printf
("1");
}}}int
main()
還是很可惜,這一次沒有成功過上機考試,只通過部分樣例。
後來回宿舍終於敲了出來,但是這個**也略顯複雜。
就拿這一次的題來作我第一篇csdn的文章吧。
字元按要求輸出Java
題目描述 編寫乙個函式,將字串中的每個單詞的倒序輸出,字串中以空格分割各個單詞,如果碰到數字則跳過。介面設計及說明 public void vconvertmsg string sinputstr,stringbuffer outputstr 輸入 string 輸出string 樣例輸入 he i...
判斷素數 輸出素數以及對稱素數 C
1 判斷輸入是否是素數或者對稱素數。include include include using namespace std isprime 函式用來判斷乙個數是否是素數 bool isprime int int main int argc,char argv return true 2 輸出一定範圍...
素數判斷及篩法
單個素數判斷 素數判斷 小資料 int prime int n miller rabin 大素數判定 單個數字n複雜度15 log n int mr 30 此陣列為測試用的a,這12個可測所有的long long int lli miller rabin lli n if x 1 return fa...