루오 구 -P1618 trifecta에 (버전 업그레이드)

제목 설명

1,2, ..., 세 그룹으로 9 수가 각각 3 × 3 자리 숫자로 구성하고, 3 × 3 자리의 비율이 있음 : B : C, 다시 결정된 세 가지의 조건을 충족 세 자리, 경우 해결책, 출력 "아니오!".

입력 형식

세 개의 숫자, ABC.

출력 형식

세 개의 숫자의 여러 행. 숫자 순서로 배열의 각 행.

샘플 입출력

입력 # 1

1 2 3

출력 # 1

192 384 576
219 438 657
273 546 819
327 654 981

설명 / 팁

확인하는 <B <C

제목 및 효과 분석

C 비 : 그것은 세 세자리 이루어진 9 아홉 개 세 원자 그룹으로 배열 한 요청 번호, 주제, 및을 만족시킬 필요하다 B.

이 수가 3 선택을 반복 할 수 없기 때문에 세 자리 숫자가 123 최소한 얻을 수있다. 당신이 폭력을 해결하기 위해 123에서 시작할 수 있도록 다음과 같이 두 개의 작은 세부 사항은있다 :

  1. 그 결과 세 자리는 0이 번호를 포함하지.
  2. 세 자리 소자 자체가 반복 될 수 없다.

코드

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    int q,b,c,sum=0,temp;
    cin >> q >> b >> c;
    for(int i=123;i<999;i++)
    {
        int a[10]={0},s=0;
        if(i/q*c>999)
            break;
        if(i%q!=0)
            continue;
        temp = i;//第一个数判断开始;
        for(int n=0;n<3;n++)
        {
            if(temp%10==0||a[temp%10]==1)
            {
                s=1;
                break;
            }

            a[temp%10]=1;
            temp = temp / 10;

        }
        if(s==1) continue;
        int j=i/q*b;
        temp = j;//第二个数判断开始;
        for(int n=0;n<3;n++)
        {
            if(a[temp%10]==0&&temp%10!=0)
                a[temp%10]=1;
            else
            {
                s=1;
                break;
            }
            temp = temp/10;
        }
        if(s==1) continue;
        int k=i/q*c;
        temp = k;//第三个数判断开始;
        for(int n=0;n<3;n++)
        {
            if(a[temp%10]==0 && temp%10!=0)
                a[temp%10]=1;
            else
            {
                s=1;
                break;
            }
            temp = temp/10;
        }
        if(s==1) continue;
        else
        {
            cout << i << " " << j << " " << k <<endl;
            sum++;
        }
    }
    if(sum==0)
    {
        cout << "No!!!" <<endl;
    }
    return 0;
}

더 당신은 내 개인 블로그를 방문 할 수 있습니다 훨씬 비난

추천

출처www.cnblogs.com/cydi/p/11455669.html