BASIC-9 特殊迴文數
阿新 • • 發佈:2019-01-12
題目
問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 程式設計求所有這樣的五位和六位十進位制數,滿足各位數字之和等於n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數佔一行。
樣例輸入
52
樣例輸出
899998
989989
998899
資料規模和約定
1<=n<=54
題解(一)
定義a,b,c,d,e,f分別代替相應的位數,再進行for迴圈過後根據位數關係判斷。
程式碼:
#include<iostream> using namespace std; int main() { int a,b,c,d,e,f,n; cin>>n; for(a=0;a<=9;a++) for(b=0;b<=9;b++) for(c=0;c<=9;c++) for(d=0;d<=9;d++) for(e=0;e<=9;e++) for(f=0;f<=9;f++) { if(a==0) { if(b==0) break; else if(b==f&&c==e&&a+b+c+d+e+f==n) cout<<b<<c<<d<<e<<f<<endl; } else { if(a==f&&b==e&&c==d&&a+b+c+d+e+f==n) cout<<a<<b<<c<<d<<e<<f<<endl; } } }
列舉 10000 到999999,對每個數用字串儲存,再對字串進行逆轉,如果原字串與其逆轉字串相等,說明是迴文數,返回各個位之和,否則返回NO
程式碼:
#include<iostream> #include<string> #include<algorithm> // reverse const int NO = -1; using namespace std; // 如果是迴文數返回各個位之和,否則返回NO(-1) int isHui(int a){ string str=""; int sum=0; while(a){ str += a%10+'0'; sum += a%10; a/=10; } string tmp = str; // 逆轉str reverse(str.begin(),str.end()); if(str == tmp) return sum; else return NO; } int main(){ int n; cin>>n; for(int i=10000;i<=999999;i++){ if(isHui(i)==n) cout<<i<<endl; } return 0; }