洛谷P1618 三连击(升级版) (暴力全排列枚举)

洛谷P1618 三连击(升级版) (暴力全排列枚举)

题目描述

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

输入格式

三个数,A B C。

输出格式

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

思路

将九个数字存到一个数组a,用**next_permutation(a,a+9)**枚举每一种情况并判断即可

注意

用do while

代码

#include<bits/stdc++.h>
using namespace std;
int a[9]={1,2,3,4,5,6,7,8,9};
int A,B,C;
int x,y,z;
int getSum()
{
    x=a[0]*100+a[1]*10+a[2];
    y=a[3]*100+a[4]*10+a[5];
    z=a[6]*100+a[7]*10+a[8];
}
int main()
{
    cin>>A>>B>>C;
    int ans=0,flag=1;
    do
    {
        getSum();
        //printf("%d %d %d\n",x,y,z);
        if(x*B*C==y*A*C&&x*B*C==z*A*B)
        {
            flag=0;
            printf("%d %d %d\n",x,y,z);
        }
    }while(next_permutation(a,a+9));
    if(flag) printf("No!!!\n");
    return 0;
}