三连击
题目描述:将1,2....,9共九个数分成三组,分别组成3个三位数,且使这3个三位数构成1:2:3的比例,试求出所有满足条件的3个三位数。
输入格式:无
输出格式:若干行,每行3个数字。按照每行第1个数字升序排列。
输入样例
无
输出样例
192 384 576
* * *
(剩余部分不予展示)
解题思路:
1、三个数之间存在1:2:3的关系,方便枚举
2、由于是9个数分组构成,故构成的三位数不会出现重复数字,所以可以从123开始枚举,但是因为是三位数,所以在333结束
3、最后判断三个三位数所有位数是1到9这九个数,并没有重复。(2个集合内所有数相加相乘结果一样,2个集合的内容一样)
代码如下:
#include <stdio.h> int main() { int a,b,c; for(a=123;a<=333;a++)/*直接枚举,因为九个数分成三组,成为三个三位数, 所以不会由重复的数字组成,因此从123开始*/ { 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))) /*此处if语句通过abc三个数每一位数的和与乘积等于1到9的和与乘积 来进行判断是否有重复数字*/ printf("%d %d %d\n",a,b,c); } return 0; }

浙公网安备 33010602011771号