好久没做题了啊没想到栽到这了。。。记录于此,警示于己
题目背景
本题为提交答案题,您可以写程序或手算在本机上算出答案后,直接提交答案文本,也可提交答案生成程序。
题目描述
将 1,2,…,9 共 9 个数分成 3 组,分别组成 3 个三位数,且使这 3 个三位数构成 1 : 2 : 3 的比例,试求出所有满足条件的 3 个三位数。
输入格式
无
输出格式
若干行,每行 3 个数字。按照每行第 1 个数字升序排列。
样例 #1
样例输入 #1
无
样例输出 #1
192 384 576
* * *
...
* * *
(剩余部分不予展示)
。
然后,我非常弱智的写了这个↓
#include<stdio.h>
int main()
{
int all[800],tem = 0;
for(int i = 1;i <= 9;i++)
{
for(int j = 1;j <= 9;j++)
{
for(int k = 1;k <= 9;k++)
{
all[tem] = i * 100 + j * 10 + k;
tem++;
}
}
}
for(int i = 1;i <= tem-2;i++)
{
for(int j = i + 1;j <= tem-1;j++)
{
for(int k = j + 1;k <= tem;k++)
{
if(all[i] * 3 == all[j] * 2 && all[j] * 2 == all[k])
printf("%d %d %d\n",all[i],all[j],all[k]);
}
}
}
return 0;
}
其实挺简单的,不解释了,AC代码↓肯定还有更简洁的代码,但。。。懒
#include<stdio.h>
int dcp[9];
bool find(int n,int tem)
{
for(int i=1;i<=tem;i++)
{
if(dcp[i]==n)
return true;
}
return false;
}
int main()
{
bool flag=false;
int num=192,numt;
for(int i = 1;i <= 136;i++)
{
for(int j=0;j<=10;j++)
dcp[j] = 0;
if(num*2<=981 && num*3<=981)
{
numt = num*1000000+num*2000+num*3;
for(int tem=1;tem<=9;tem++)
{
if(find(numt%10,tem))
{
flag=true;
break;
}
dcp[tem] = numt%10;
if(numt!=0)
numt = numt/10;
}
if(flag)
{
flag=false;
num++;
continue;
}
printf("%d %d %d\n",num,num*2,num*3);
}
num++;
}
return 0;
}
总结:
- 审题不够认真仔细
- 狂妄自大,认为简单题就可以松懈
记录于此,警示于己,愿重新开启新的征程!
编辑于2023-07-11 23:21:44
更新2023-07-13 19:46:18
好吧,还是忍不住翻了下题解,确实有更短的()不过他是把判断叠起来了,也,也算是短吧
以下代码来自洛谷用户@WilliamEdward
#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;
}
评论 (0)