luogu P1618 三连击(升级版)
题目描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。
//感谢黄小U饮品完善题意
输入输出格式
输入格式:
三个数,A B C。
输出格式:
若干行,每行3个数字。按照每行第一个数字升序排列。
输入输出样例
输出样例#1:
WA代码
192 384 576
219 438 657
273 546 819
327 654 981
乍一看这题目,升不升级,意义不大啊,所以你的错误解题思想就开始蔓延了。
开始看的这题后的我开始枚举第一个数,又根据比例找出了其他两个数,高高
兴兴的提交了。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; bool ans; int a,b,c; int main() { cin>>a>>b>>c; for(a=123;a<=333;a++) { int x=a*b; int y=a*c; if((a/100)*(a/10%10)*(a%10)*(x/100)*(x/10%10)*(x%10)*(y/100)*(y/10%10)*(y%10)==1*2*3*4*5*6*7*8*9){ printf("%d %d %d\n",a,x,y); ans=true; } } if(!ans)printf("No!!!"); return 0; }
WOC?这是咋滴啦,为啥只有60分。
(1)怕不是比例比较大?有超过一千的数?加个特判吧。---好了(依旧60分)。
(2)嗯哼?不可能啊?哦!自己zz了,我枚举的是第一个数啊,而却用比例乘,那乘出来是个啥?再次提交(80分)
(3)咦?这个“No”是咋回事?不成立的,我为啥有输出,一定是控制条件不太够吧,这还能往哪加呢?if咯。
哦,对了,好像这几个数分别为1,2,3...9还要相加得45吧,加上试试。好吧(100分)。
个人感觉这题很神奇。
代码在此:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; bool ans; int a,b,c; int main() { cin>>a>>b>>c; for(int i=1;i<=333;i++) { int x=i*b; int y=i*c; int z=a*i; if(z>=1000||y>=1000||x>=1000)break; if((z/100)*(z/10%10)*(z%10)*(x/100)*(x/10%10)*(x%10)*(y/100)*(y/10%10)*(y%10)==1*2*3*4*5*6*7*8*9 &&(z/100)+(z/10%10)+(z%10)+(x/100)+(x/10%10)+(x%10)+(y/100)+(y/10%10)+(y%10)==45){ printf("%d %d %d\n",z,x,y); ans=true; } } if(ans==0)printf("No!!!"); return 0; }
除特别注明外,本站所有文章均为Manjusaka丶梦寒原创,转载请注明来自出处