小明學長給學弟的任務
阿新 • • 發佈:2018-11-10
題目描述
這幾天,小明學長事情比較多,一邊寫檔案,一邊思考怎麼為小石壩們出既有意思,又能檢驗大家學習情況的題目。忙的一塌糊塗的小明學長看見石榴學弟竟然來找他閒聊!閒聊!!!聊著聊著石榴學弟隨口一句:“等我看見好的題目也加上去”,“行啊” , “。。。”(都知道做題消耗腦細胞,其實出題消耗更多腦細胞,髮際線又得高了,寶寶心裡苦,不想說話),,於是,石榴理所當然的認為學弟替學長分擔任務是一種應該傳承的美德,那麼就把這道困擾石榴好久的問題交給你們了:
給定0~9的數字,求出能組成的所有各位不重複的三位數。
輸入
多組測試資料,當n為0時輸入結束且不做輸出。
對於每組測試樣例:第一行一個數字n(3<= n <= 10)
第二行給出 n個0~9的整數,且按照從小到大不重複的給出,用空格隔開。
輸出
對於每組輸入,按照從小到大輸出,輸出能組成的所有各位不重複的三位整數,一個整數佔一行。
樣例輸入
3 1 2 3 3 4 6 8 0
樣例輸出
123 132 213 231 312 321 468 486 648 684 846 864
解題思路:
1:判斷n>0是否成立,否結束,是,往下
2:輸入 n個0~9的整數,且按照從小到大不重複的給出,用空格隔開。
3:將這n 個數組成各位不重複的三位整數,共6*C(n,3)個//C()表示組合
4:按從小到大輸出
#include<iostream> #include<algorithm> #define num 10010 using namespace std; long long C(int n,int m) //組合 { long long t=1; m=(n-m)>m?(n-m):m; for(int i=m+1;i<=n;i++) t*=i; for(int i=1;i<=n-m;i++) t/=i; return t; } int main() { int n; while(1) { cin>>n; if(n>0) { int a[11]; int b[num]; int l=0,t; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) { for(int j=0;j<n;j++) for(int k=0;k<n;k++) if(a[i]!=a[j]&&a[i]!=a[k]&&a[j]!=a[k]) { b[l]=100*a[i]+10*a[j]+a[k]; l++; } } t=6*C(n,3); sort(b,b+t); for(int i=0;i<t;i++) { if(b[i]>100) cout<<b[i]<<endl; } } else break; } return 0; }