藍橋杯 【基礎練習】 特殊迴文數
阿新 • • 發佈:2019-02-05
問題一:迴文數
問題描述 1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有這樣的四位十進位制數。 輸出格式 按從小到大的順序輸出滿足條件的四位十進位制數。思路:分別求出這個四位數的每一個位上的數,然後做比較
#include<iostream> using namespace std; int main() { for(int n=1000;n<10000;n++) { int a = n/1000; //a是千位 int b = (n - a*1000)/100; //b是百位 int c = (n - a*1000 - b*100)/10;//c是十位 int d = (n - a*1000 - b*100)%10;//d是個位 if(a == d&&b == c) { cout<<n<<endl; } } return 0; }
問題二:特殊迴文數
問題描述 123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。輸入一個正整數n, 程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 。 輸入格式 輸入一行,包含一個正整數n。 輸出格式 按從小到大的順序輸出滿足條件的整數,每個整數佔一行。 樣例輸入 52 樣例輸出 899998
989989
998899 資料規模和約定 1<=n<=54。
思路:特殊迴文數不但要求該數字為迴文數,還要求該數字每一位數字的和相加等於一個數,而且該題目包含了四位和五位數
#include<iostream> using namespace std; int main() { int m; cin>>m; for(long n=10000;n<100000;n++) { int a = n/10000; //第一個 int b = (n - a*10000)/1000; //第二個 int c = (n - a*10000 - b*1000)/100; //第三個 int d = (n - a*10000 - b*1000 - c*100)/10; //第四個 int e = (n - a*10000 - b*1000 - c*100)%10; //第五個 if(a == e && b == d) //是否為迴文數 { if(a+b+c+d+e == m) //是否為五位特殊迴文數 { cout<<n<<endl; } } } for(long n=100000;n<1000000;n++) { int a = n/100000; //第一個 int b = (n - a*100000)/10000; //第二個 int c = (n - a*100000 - b*10000)/1000; //第三個 int d = (n - a*100000 - b*10000 - c*1000)/100; //第四個 int e = (n - a*100000 - b*10000 - c*1000 - d*100)/10; //第五個 int f = (n - a*100000 - b*10000 - c*1000 - d*100)%10; //第六個 if(a ==f && b ==e && c == d) //是否為迴文數 { if((a+b+c+d+e+f) == m) //是否為六位特殊迴文數 { cout<<n<<endl; } } } return 0; }
比較:問題二的數字和計算量都大於第一個,通過cpu使用的時間上就可以看出來
提交序號 | 姓名 | 試題名稱 | 提交時間 | 程式碼長度 | CPU使用 | 記憶體使用 | 評測詳情 | |||
---|---|---|---|---|---|---|---|---|---|---|
53642 | 趙哲 | 特殊迴文數 | 01-25 22:58 | 910B | C++ | 正確 | 100 | 31ms | 860.0KB | 評測詳情 |
53264 | 趙哲 | 迴文數 | 01-25 18:39 | 324B | C++ | 正確 | 100 | 0ms | 860.0KB | 評測詳情 |