啥都输出no!!求助

P1618 三连击(升级版)

zhi0mx @ 2021-05-23 09:45:05


#include <iostream>
using namespace std;
int a,b,c,x,y,z,x1,x2,x3,y1,y2,y3,z1,z2,z3,f;
int main()
{
    cin>>a>>b>>c;
    for (int i=1;i<1000;i++)
    {
        x=i*a,y=i*b,z=i*c;
        if (x<1000 && y<1000 && z<1000)
            continue;
        x1=x/100;
        x2=x%100/10;
        x3=x%10;
        y1=y/100;
        y2=y%100/10;
        y3=y%10;
        z1=z/100;
        z2=z%100/10;
        z3=z%10;
        if (x1+x2+x3+y1+y2+y3+z1+z2+z3==45 && x1*x2*x3*y1*y2*y3*z1*z2*z3==362880)
            cout<<x<<' '<<y<<' '<<z,f=1;
    }
    if (!f)
        cout<<"No!!!";
    return 0;
}

by 违规用户名76G!ihcm @ 2021-05-23 09:46:44

@zhi0mx x<1000&&y<1000&&z<1000 continue;

就都没了


by lorz @ 2021-05-23 11:03:09

你这问题也太多了。 1.如果我给样例“2 4 6”其实和题目样例一样,但你这个程序就不会有“219 438 657”这类答案,因为没有整数乘偶数是奇数。可以用gcd去把数据变成互质的。 2.输出的三个数本来就该小于1000,因为都是三位数啊,所以那个"if (x<1000 && y<1000 && z<1000) continue;"就不行,我猜你是想写"if(x<100 || y<100 || z<100) continue;"(有数不是三位数就不符合条件)吧,其实也可以改成"if(x<100) continue;"因为X<Y<Z这是一定的 3.你输出少了一个<<endl;就不会换行,输出格式有误 4.还有很多地方可以优化,并不是有错,只是很慢。比如那个for循环不一定从1开始,到1000结束等


by zhi0mx @ 2021-05-30 09:59:22

还是不行


#include <iostream>
using namespace std;
int a,b,c,x,y,z,x1,x2,x3,y1,y2,y3,z1,z2,z3,num[11],sn[11],f;
int main()
{
    cin>>a>>b>>c;
    for (int i=a;i>1;i--)
        if (a%i==0 && b%i==0 && c%i==0)
            a/=i,b/=i,c/=i;
    for (int i=1;i<1000;i++)
    {
        x=i*a,y=i*b,z=i*c;
        if (x<100 && y<100 && z<100)
            continue;
        num[1]=x/100;
        num[2]=x%100/10;
        num[3]=x%10;
        num[4]=y/100;
        num[5]=y%100/10;
        num[6]=y%10;
        num[7]=z/100;
        num[8]=z%100/10;
        num[9]=z%10;
        for (int i=1;i<=9;i++)
        {
            sn[num[i]]++;
            if (sn[num[i]]>1)
                f=1;
        }
        if (!f && !sn[0])
            cout<<x<<' '<<y<<' '<<z<<endl;
    }
    return 0;
}

|