#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[10], b[10], c[10], n1[999], n2[999], n3[999], s[10], i, j, k, f, t, r; //创建三个数组,用来存放1-9
t = 1;
for (i=1; i<=10; i++) //为三个数组赋值1-9
{
a[i] = i;
b[i] = i;
c[i] = i;
}
//### 列出符合“在1-9选三个数组成各位都不同”的第一个三位数 ###
for (i=1; i<4; i++) //第一层循环控制第一位数(百位),并且剔除掉超过400的数
{
for (j=1; j<10; j++) //二层循环控制第二位(十位)
{
if (j!=i) //保证第二位中不含第一位的数字(剔除十位中的百位数字)
{
for (k=1; k<10; k++) //三层循环控制第一位(个位)
{
if (k!=i && k!=j) //保证不含第一、二位中的数(剔除个位中百、十位中数字)
{
n1[t] = a[i]*100 + b[j]*10 +c[k]; //将三位不同数字组合成第一个三位数
n2[t] = n1[t] * 2; //第二个三位数
n3[t] = n1[t] * 3; //第三个三位数
t++; //确定符合条件的第一个三位数的个数,用于下面控制循环
}
}
}
}
}
//### 循环判断三个三位数所含数字在1-9中且各不相同 ##
for (f=1; f<t; f++) //一层循环,循环遍历上面求出的在数组n*[]中的元素
{
if (n1[f]>191 && n1[f]<334) //确定所求第一位三位数在191-334之间,其余不符合条件
{ //把三个三位数中全部9个数存放在数组s[]中
s[0] = n1[f] / 100;
s[1] = (n1[f] % 100) / 10;
s[2] = n1[f] % 10;
s[3] = n2[f] / 100;
s[4] = (n2[f] % 100) / 10;
s[5] = n2[f] % 10;
s[6] = n3[f] / 100;
s[7] = (n3[f] % 100) / 10;
s[8] = n3[f] % 10;
r = 0; //r赋值0(清零)
for (i=0; i<8; i++) //确保三个三位数中不含相同数字且不含数字0
{
for (j=i+1; j<9; j++)
{
if (s[i]==s[j] || s[i]==0 || s[j]==0) //如果有相同数字或有数字0则令r=1并跳转
{
r = 1;
goto A;
}
}
}
A:
if (r == 0) //如果各位数字均不同并且不含有数字0,则输出
{
printf("%d %d %d\n", n1[f], n2[f], n3[f]);
}
}
}
}
洛谷 P1008 三连击 将1,2, \cdots ,91,2,⋯,9共99个数分成33组,分别组成33个三位数,且使这33个三位数构成1:2:31:2:3的比例,试求出所有满足条件的33个三位数。 ...
程序员文章站
2022-03-10 09:47:01
...