【蓝桥杯-寻找三位数】
一、问题描述
将1,2,…,9共9个数分成三组,分别组成三个三位数,且使这三个三位数构成1: 2:3的比例,试求出所有满足条件的三个三位数。 例如:三个三位数192,384,576满足以上条件。
二、分析思路
由于是三位数,所以输入的数的范围是0~999。由于三个数的比值为1:2:3,所以第一个数的范围为0 ~333,但是最小的三位数是123,所以是123 ~333。有重复利用的数333,因此实际范围为123 ~329,所以从123 ~329开始遍历,每个数都要出现一次,创建一个数组用来记录数字的使用,当使用了的时候标记为1,未使用标记为0,最后进行判断是否满足要求,然后输出。
1.代码如下:
#include<iostream> #define A(N) while(N){ x[N%10]=1;N=N/10; }//给数组对应的位置赋值为1进行标记 using namespace std; int main() { int a,b,c=0; int d,e,f=0; for (a = 123; a < 329; a++) { int x[10]={ 0};//定义一个取数的数组{1,2,3,4,5,6,7,8,9},每次循环初始化一次数组 b=2*a;//比值为2的数 c=3*a;//比值为3的数 d=a; e=b; f=c; int g=1;//用于判断输出 A(d); A(e); A(f); for (int i = 1; i < 10; i++)//对数组进行遍历,查看是否存在位置有0,有0则说明有数字没用到,有重复使用的数字 { if (x[i]!=1) { g=0; break; /* code */ } /* code */ } if (g)/满足要求时g=1,输出三个数 { cout<<a<<" "<<b<<" "<<c<<endl; /* code */ } /* code */ } return 0; }
结果输出
下一篇:
合成复用原则——面向对象设计原则