递归推导——猜年龄
一、問題描述
班里轉來了一位新同學,他在介紹自己年齡的時候說:“我的年齡的平方是一個三位數,立方是一個四位數,四次方是一個六位數。三次方和四次方正好將0/1/2/3/4/5/6/7/8/9這10個數字全部覆蓋。”,那么,該同學今年多大?
二、算法思想
首先將年齡的大致范圍確定下來,因為17的四次方是83521,小于六位數;22的三次方是10648,大于四位數;因此該同學的年齡范圍是大于17而小于22。然后將17~22之間的數進行列舉,將計算得到的四位數和六位數的每位數字分別存放于數組中,再判斷是否有重復或者部分數字未出現,最后將運算出的結果全部輸出即可。
?
補充:
我之前的想法是將三次方m的各位數放在一個數組a中,四次方n的各位數放在另一個數組b中,然后兩重循環比較這兩個數組是否有相同的數字,一旦發現一個相同的數字,則說明本次的年齡x不符合題意,尋找下一個x。但是這個想法是錯的,因為沒有考慮到三次方m中或四次方n中,它們本身會有相同的數字出現,例如20的四次方是160000。
三、程序代碼
#include <stdio.h> int main(){long m, n, a[10] = {0}, b[10] = {0};int x=18, i, j;do{m = x*x*x; //計算立方,并入數組a中 for(i=3; i>=0; i--){a[i] = m%10;m = m/10;}n = x*x*x*x; //計算四次方,放入數組a中,注意下標 for(i=9; i>=4; i--){a[i] = n%10;n = n/10;}//統計每個數字出現的次數 for(i=0; i<10; i++){b[a[i]] ++;}//如果0~9每個數字都只出現一次,那么輸出此時的x即為該同學的年齡 for(i=0; i<10; i++){if(b[i] == 1){if(i == 9){printf("\n%The age is %ld\n\n", x);}}elsebreak;}x ++;//繼續討論 }while(x<22);return 0; }四、運行結果
?
轉載于:https://www.cnblogs.com/IronLavender/p/6817450.html
總結
- 上一篇: Python 模块(二)
- 下一篇: UE4从4.15移植到4.16