第一篇博客——洛谷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 普及组] 三连击的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-01后台管理开发学习:新手入门指南
- 2024-11-01后台管理系统开发学习:新手入门教程
- 2024-11-01后台开发学习:从入门到实践的简单教程
- 2024-11-01后台综合解决方案学习:从入门到初级实战教程
- 2024-11-01接口模块封装学习入门教程
- 2024-11-01请求动作封装学习:新手入门教程
- 2024-11-01登录鉴权入门:新手必读指南
- 2024-11-01动态面包屑入门:轻松掌握导航设计技巧
- 2024-11-01动态权限入门:新手必读指南
- 2024-11-01动态主题处理入门:新手必读指南