【洛谷】P1008 三连击
程序员文章站
2024-02-01 19:53:34
...
题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三位数,且使这33个三位数构成1:2:31:2:3的比例,试求出所有满足条件的33个三位数。
输入输出格式
输入格式:
木有输入
输出格式:
若干行,每行33个数字。按照每行第11个数字升序排列。
输入输出样例
输入样例#1:
无
输出样例#1:
192 384 576 * * * ... * * * (输出被和谐了)
本来想着怎样才能简化,最后想不出来,还专门写了两个函数,一个函数判断单个数是否有重复使用数字,另一个判断两个数字之间是否有重复使用数字。
#include <iostream>
using namespace std;
bool can(int n);
bool inspect(int n1, int n2);
int main(){
//可从987 简化到333
for(int a=123;a<=333;a++){
if(!can(a))continue;
int b = a*2;
if(!can(b))continue;
int c = a*3;
if(!can(c))continue;
if(!inspect(a, b)||!inspect(a, c)||!inspect(b, c))continue;
cout << a << " " << b << " " << c << endl;
}
return 0;
}
bool can(int n){
int a = n%10;
n /= 10;
int b = n%10;
n /= 10;
int c = n%10;
if(a==0||b==0||c==0||a==b||a==c||b==c)
return false;
else
return true;
}
bool inspect(int n1, int n2){
int a1 = n1%10;
n1 /= 10;
int b1 = n1%10;
n1 /= 10;
int c1 = n1%10;
int a2 = n2%10;
n2 /= 10;
int b2 = n2%10;
n2 /= 10;
int c2 = n2%10;
if(a1==a2||a1==b2||a1==c2||b1==a2||b1==b2||b1==c2||c1==a2||c1==b2||c1==c2)
return false;
else
return true;
}
下面是大佬的代码,同样是暴力,都有差距,伤心了。
#include <stdio.h>
int main()
{
int a,b,c;
for(a=123;a<=333;a++)
{
b=a*2;
c=a*3;
if((a/100+a/10%10+a%10+b/100+b/10%10+b%10+c/100+c/10%10+c%10==1+2+3+4+5+6+7+8+9)&&((a/100)*(a/10%10)*(a%10)*(b/100)*(b/10%10)*(b%10)*(c/100)*(c/10%10)*(c%10)==(1)*(2)*(3)*(4)*(5)*(6)*(7)*(8)*(9)))
printf("%d %d %d\n",a,b,c);
}
return 0;
}
上一篇: php中动态调用函数的方法
下一篇: Spring学习手札(一)