【蓝桥杯-寻找三位数】
一、问题描述
将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;
}
结果输出
下一篇:
合成复用原则——面向对象设计原则
