【蓝桥杯-寻找三位数】


一、问题描述

将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;
}

结果输出

经验分享 程序员 微信小程序 职场和发展