問題描述
123321是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的。
輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。
輸入一個正整數n, 編程求所有這樣的五位和六位十進制數,滿足各位數字之和等於n 。
輸入格式
輸入一行,包含一個正整數n。
輸出格式
按從小到大的順序輸出滿足條件的整數,每個整數占一行。
樣例輸入
52
樣例輸出
899998
989989
998899
989989
998899
數據規模和約定
1<=n<=54。
枚舉+判斷
#include<iostream> #include<algorithm> using namespace std; int ans[1000005]; int main() { int n,now,t=0; cin>>n; if(n%2==0)//只有偶數才有6位十進制數的可能 { now=n/2; for(int i=9;i>=1;i--)//第一位不能為0 { if(now-i>=0) { for(int j=9;j>=0;j--) { if(now-i-j>=0) { for(int k=9;k>=0;k--) { if(i+j+k==now) { ans[t++]=i*100000+j*10000+k*1000+k*100+j*10+i; } } } } } } } //五位數的情況 int l; if(n%2==0) { l=8; } else l=9; for(int i=l;i>=0;i=i-2)//先考慮最中間位數的情況,如果n是偶數,則最中間的一定是偶數,如果n是奇數,則中間位為奇數 { if(n-i>=0) { now=(n-i)/2; for(int j=9;j>=1;j--)//首位不為0 { if(now-j>=0) { for(int k=9;k>=0;k--) { if(j+k==now) ans[t++]=j*10000+k*1000+i*100+k*10+j; } } } } } sort(ans,ans+t); for(int i=0;i<t;i++) { cout<<ans[i]<<endl; } return 0; }
問題描述
1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,編程求所有這樣的四位十進制數。
輸出格式
按從小到大的順序輸出滿足條件的四位十進制數。
#include<iostream> #include<algorithm> using namespace std; int ans[1000005]; int main() { int n,t=0; for(int n=1;n<=18;n++) { for(int i=9;i>=1;i--) { if(n-i>=0) { for(int j=9;j>=0;j--) { if(i+j==n) ans[t++]=i*1000+j*100+j*10+i; } } } } sort(ans,ans+t); for(int i=0;i<t;i=i+1) { cout<<ans[i]<<endl; } return 0; }