第一篇博客——洛谷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;
}

 

posted @ 2022-03-30 20:52  是若水啊  阅读(106)  评论(0)    收藏  举报
/* 设置文章评论功能 */ 返回顶端 levels of contents