洛谷P1618 三連擊(升級版)
阿新 • • 發佈:2018-11-21
題目描述
將1,2,…,9共9個數分成三組,分別組成三個三位數,且使這三個三位數的比例是A:B:C,試求出所有滿足條件的三個三位數,若無解,輸出“No!!!”。
輸入格式:
三個數,A B C。
輸出格式:
若干行,每行3個數字。按照每行第一個數字升序排列。
輸入樣例#1:
1 2 3
輸出樣例#1:
192 384 576
219 438 657
273 546 819
327 654 981
說明
保證A<B<C
//t[1]至t[3]儲存第一個數字的百位、十位、個位數字 //t[4]至t[6]儲存第二個數字的百位、十位、個位數字 //t[7]至t[9]儲存第三個數字的百位、十位、個位數字 #include<iostream> using namespace std; int main() { int i,j,l; int a,b,c,flag=1; int maxnum1=0,count=0; int num1,num2,num3,t[10]={0,0,0,0,0,0,0,0,0,0}; cin>>a>>b>>c; maxnum1=(999*a)/c; for(i=1;i<=9;i++) { t[1]=i; for(j=1;j<=9;j++) { if(j==i) continue; t[2]=j; for(l=1;l<=9;l++) { flag=1; if(l==i||l==j) continue; t[3]=l; num1=i*100+j*10+l; if(num1>maxnum1) break; else { num2=num1*b/a; num3=num1*c/a; t[4]=num2/100; t[5]=(num2/10)%10; t[6]=num2%10; for(int k=4;k<=6;k++) { for(int m=1;m<=k-1;m++) if(t[k]==t[m]||t[k]==0) { flag=0; break; } if(flag==0) break; else //flag!=0 { flag=1; t[7]=num3/100; t[8]=(num3/10)%10; t[9]=num3%10; for(int n=7;n<=9;n++) { for(int o=1;o<=n-1;o++) { if(t[n]==0||t[n]==t[o]) { flag=0;break; } } if(flag==0) break; } } } if(flag) { count++; cout<<num1<<" "<<num2<<" "<<num3<<endl; } } } } } if(count==0) { cout<<"No!!!"<<endl; } return 0; }