2018-11-02洛谷P1008三连击题解
2018-11-02 本文已影响0人
苏夜月
我的想法是让三组数分别等于a,b,c,又因为三组数要有1:2:3的关系,所以直接令b=2a,c=3a,接下来在检测a,b,c里面有没有重复的数字,把a,b,c的个十百位全部分离出来,放到一个数组里面,在用循环判断数组的元素是不是有重复,如果没有重复就输出。
第一次做完后出错的地方:
1、应该将flag=1放在最外层的for循环中,应该循环一次就初始化一次flag的值,否则第一次循环flag=0后后面的flag全部都会为0
2、在比较数组的元素有没有重复的时候要注意i不能够等于j,因此在判断的时候应该加上这一条。
3、数组元素不能够出现0
附上最后成功运行的代码
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a,b,c;
int i,j;
for(a=123;a<329;a++)
{
int flag=1;
b=a*2;
c=a*3;
int k[9];
int d,e,f;
d=a;
e=b;
f=c;
for(i=0;i<9;i=i+3)
{
k[i]=d%10;
d=d/10;
k[i+1]=e%10;
e=e/10;
k[i+2]=f%10;
f=f/10;
}
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(k[i]==k[j]&&i!=j)
flag=0;
}
}
for(i=0;i<9;i++)
if(k[i]==0)
flag=0;
if(flag==1)
printf("%d %d %d\n",a,b,c);
}
return 0;
}
如果有错误或者需要改进的地方,欢迎指正