解题思路:
题目给出的条件已经大大限定了三位数的范围,对于比例为1的三位数,它的三倍也应该是三位数,一个粗略的范围是[100,999/3],也就是[100,333],又由于三位数每位的数字各不相同,范围调整为[123,329];从这个范围里取出一个比例为1的数,就可以计算出比例为2、3的三位数;设置数组x[10],若下标1到9对应的数字i在三位数中出现了,就用此下标访问数组x[i]计数加1,要满足题设条件,x[1]到x[9]都必须为1,表明9个数字各不相同且都只出现了一次,只有这样,才可以输出对应的三个三位数。用C语言描述,就是:

#include<stdio.h>
#define z(N) while(N){x[N%10]++;N/=10;}
int main(){
    int a,b,c,d,e,f;
    for(a=123;a<=329;a++){
        int g,i,x[10]={0};//初始化计数数组
        b=2*a;c=3*a;//算出比例为2、3的三位数
        d=a;e=b;f=c;
        z(d)z(e)z(f)//取出三个三位数中的每位并计数
        g=1;
        for(i=1;i<=9;i++)
            if(x[i]!=1){//若某位数并非只出现了一次
                g=0;//不满足题设的条件
                break;
            }
        if(g) printf("%d %d %d\n",a,b,c);
    }
    return 0;
}

注意事项:
找到符合条件的所有数后,直接输出结果。

参考代码:

#include<stdio.h>
int main(){
    puts("192 384 576");
    puts("219 438 657");
    puts("273 546 819");
    puts("327 654 981");
    return 0;
}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论