第一篇博客——洛谷P1008 [NOIP1998 普及组] 三连击

2022/3/30 23:24:29

本文主要是介绍第一篇博客——洛谷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; }

 



这篇关于第一篇博客——洛谷P1008 [NOIP1998 普及组] 三连击的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程