1. 程式人生 > >藍橋杯-猜年齡問題

藍橋杯-猜年齡問題

log 參加 clu 規律 strong image arr 清華大學 藍橋杯

問題描述:

美國數學家維納(N.Wiener)智力早熟,11歲就上了大學。他曾在1935~1936年應邀來中國清華大學講學。 一次,他參加某個重要會議,年輕的臉孔引人註目。於是有人詢問他的年齡,他回答說:“我年齡的立方


是個4位數。我年齡的4次方是個6位數。這10個數字正好包含了從0到9這10個數字,每個都恰好出現1次。”請你推算一下,他當時到底有多年輕。通過瀏覽器,直接提交他那時的年齡數字


註意:不要提交解答過程,或其它的說明文字!

問題分析:

  這是藍橋杯比賽時的一道填空題,而非程序設計題,目的在於求解其具體年齡,因此對於這種題目,我們應盡可能的嘗試使用暴力破解,犧牲編程空間,節約抽象化問題(對問題找規律)的時間。我們可以思考,多大的年齡範圍算作年輕呢?我們不妨先假設它為11-30,進而使用枚舉法,計算出其結果。

代碼描述:

#include<stdio.h>
void solve(){
    int i=11,a,b,j,k;
    int arr[5],brr[7];
    for(;i<30;i++){
        a=i*i*i;
        b=a*i;
        for(j=3;j>=0;j--){
            arr[j]=a%10;//將四位數都存到arr數組中 
            a=a/10;
        }
        for(k=5;k>=0;k--){
            brr[k]=b%10;/將六位數都存到arr數組中 
            b
=b/10; } if(arr[0]!=arr[1]&&arr[0]!=arr[2]&&arr[0]!=arr[3]&&arr[0]!=brr[0]&&arr[0]!=brr[1]&&arr[0]!=brr[2]
     \&&arr[0]!=brr[3]&&arr[0]!=brr[4]&&arr[0]!=brr[5]) if(arr[1]!=arr[2]&&arr[1]!=arr[3]&&arr[1]!=brr[0
]&&arr[1]!=brr[1]&&arr[1]!=brr[2]&&arr[1]!=brr[3]
     \&&arr[1]!=brr[4]&&arr[1]!=brr[5]) if(arr[2]!=arr[3]&&arr[2]!=brr[0]&&arr[2]!=brr[1]&&arr[2]!=brr[2]&&arr[2]!=brr[3]&&arr[2]!=brr[4]
     \&&arr[2]!=brr[5]) if(arr[3]!=brr[0]&&arr[3]!=brr[1]&&arr[3]!=brr[2]&&arr[3]!=brr[3]&&arr[3]!=brr[4]&&arr[3]!=brr[5]) //"\"為續行符 if(brr[0]!=brr[1]&&brr[0]!=brr[2]&&brr[0]!=brr[3]&&brr[0]!=brr[4]&&brr[0]!=brr[5]) if(brr[1]!=brr[2]&&brr[1]!=brr[3]&&brr[1]!=brr[4]&&brr[1]!=brr[5]) if(brr[2]!=brr[3]&&brr[2]!=brr[4]&&brr[2]!=brr[5]) if(brr[3]!=brr[4]&&brr[3]!=brr[5]) if(brr[4]!=brr[5]){ printf("%d\n",i); int p=0; for(;p<4;p++) printf("%d",arr[p]); int g=0; for(;g<6;g++) printf("%d",brr[g]); } } } int main(){ solve(); return 0; }

運行結果:

技術分享圖片

藍橋杯-猜年齡問題