【洛谷新手村】P1618 三连击(升级版)

 

题目描述

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


ElevenX

感谢这位大佬的提供的STL全排列的写法,我觉得这个写法的确不错。很简洁就是if有点长罢了。

然后我就用了自己的方法来写的。

#include
using namespace std;
int a[10]={0,1,2,3,4,5,6,7,8,9};
int main()
{
    int A,B,C,h=0;
    cin>>A>>B>>C;
    int t=A*B*C;
    A=t/A;
    B=t/B;
    C=t/C;
    do{
        if((100*a[1]+10*a[2]+a[3])*A==(100*a[4]+10*a[5]+a[6])*B&&(100*a[1]+10*a[2]+a[3])*A==(100*a[7]+10*a[8]+a[9])*C)//如果符合比例;
        {
            cout<

然后我自己的做法:

照样简洁明了。

#include
using namespace std;
int main()
{
    int A,B,C,r,flag=0;
    int t[3];
    scanf("%d%d%d",&A,&B,&C);
    for(int i=100;i<=334;i++){
        if(i%A) continue;
        t[0]=i;
        t[1]=i/A*B;
        t[2]=i/A*C;
        r=0;

        for(int j=0;j<3;j++){
            int tmp=t[j];
            int d=0;
            while(tmp){
                r|=(1<<(tmp%10-1));
                tmp/=10;
                d++;
            }
            if(d!=3){
                r=0;
                break;
            }
        }
        if((r&511)==511){
            flag=1;
            printf("%d %d %d\n",t[0],t[1],t[2]);
        }
    }
    if(!flag){
        printf("No!!!\n");
    }
    return 0;
}

 

你可能感兴趣的:(【洛谷新手村】P1618 三连击(升级版))