1. 程式人生 > 其它 >第一篇部落格——洛谷P1008 [NOIP1998 普及組] 三連擊

第一篇部落格——洛谷P1008 [NOIP1998 普及組] 三連擊

題目連結:https://www.luogu.com.cn/problem/P1008

題目大意:

  

題目描述

1,2,…,91, 2, \ldots , 91,2,,9 共 999 個數分成 333 組,分別組成 333 個三位數,且使這 333 個三位數構成 1:2:31 : 2 : 31:2:3 的比例,試求出所有滿足條件的 333 個三位數。

輸入格式

輸出格式

若干行,每行 333 個數字。按照每行第 111 個數字升序排列。

 

這個題也是最開始就會想直接暴力,畢竟,一共才九個數排列組合,一共只有  9!  個,但是一個小問題就是怎麼保證三個數中的各個位置不出現重複的數字

我們可以用相等的方法就是

  例如三個數為 a, b,c

  則有 a/100+a%100/10+a%100%10+b/100+b%100/10+b%100%10+c/100+c%100/10+c%100%10=1+2+3+4+5+6+7+8+9&&a/100*a%100/10*a%100%10+b/100*b%100/10*b%100%10*c/100*c%100/10*c%100%10=1*2*3*4*5*6*7*8*9;

這樣就可以保證數字的相等了

程式碼如下

 


#include<bits/stdc++.h> using namespace std; const int N = 1000; int a[N]={0}; int judge(int a,int b,int c){     int a1=a/100,b1=b/100,c1=c/100;
    a%=100,b%=100,c%=100;     int a2=a/10,b2=b/10,c2=c/10;     a%=10,b%=10,c%=10;     // cout<<"\t"<<a<<b<<c<<a1<<b1<<c1<<a2<<b2<<c2<<endl;     if(a+b+c+a1+a2+b1+b2+c1+c2==1+2+3+4+5+6+7+8+9&&a*b*c*a1*a2*b1*b2*c1*c2==(1)*(2)*(3)*(4)*(5)*(6)*(7)*(8)*(9)){
        return 1;     }     return 0; }       int main(){     for(int i=123;i<=333;i++){         int b=i*2;         int c=i*3;         if(judge(i,b,c)&&b<=987&&c<=987){             cout<<i<<" "<<b<<" "<<c<<endl;         }     }     system("pause");     return 0; }