luogu P1618 三连击(升级版)

题目描述

将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数的比例是A:B:C,试求出所有满足条件的三个三位数,若无解,输出“No!!!”。

//感谢黄小U饮品完善题意

输入输出格式

输入格式:

三个数,A B C。

 

输出格式:

若干行,每行3个数字。按照每行第一个数字升序排列。

 

输入输出样例

输入样例#1: 
1 2 3
输出样例#1: 
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;
}
WA代码

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;
}


 
posted @ 2018-04-15 08:24  Manjusaka丶梦寒  阅读(425)  评论(0编辑  收藏  举报