解题思路:
首先明确问题:题目要求从1到9这9个数字中三个一组组成三个三位数(我们用abc,def,ghi来表示,设定abc<def<ghi),并有abc:def:ghi=1:2:3,且abc,def,ghi不能有重复得数字。
思路:首先我们先算出最小的数(abc)的范围;要求不重复,则最小的数肯定为123,那么最大的数是987了(987是所有不重复三位数中最大的);因为要的是abc的最大值,所以根据比例可以的到abc最大为987/3=329;那么我们现在可以确定abc的范围是 123 <=abc <=329;然后遍历123到329这个范围,判断每一个数字是否符合要求,(def、ghi怎么确定??)abc知道了,def=2*abc、ghi=3*abc,这就自然确定了;在遍历过程中判断每一组(abc、def、ghi)数是否符合要求,如果符合要求打印,不符合要求,继续遍历下一组;我们可以使用一个数组大小为10作为标志数组;在遍历过程中把abc、def、ghi分别分解出每一位的数字,然后把该数字对应的数组下标的元素值为1;这样在一次遍历结束之后,只用判断数组中除了0号为的每一个数组的元素是否都为1,如果都为1;则打印;反之,继续下次遍历;当然你使用循环也可以做的我所述的结果;我代码中的实现我所述的这个过程并非循环;大家可以研究一下(这里就不多说了,这个过程的方法很多)。
谢谢,什么时候写作水平能提高啊, 不懂得留言 谢谢
注意事项:
参考代码:
#include <cstdio> #include <cstring> #include <string> #include <cmath> #include <functional> #include <iostream> #include <algorithm> using namespace std; int main() { int flag[10]; for(int abc = 123; abc <= 329; ++abc) { memset(flag,0,sizeof(flag)); flag[abc/100] = flag[abc/10%10] = flag[abc%10] = 1; int def = 2*abc; flag[def/100] = flag[def/10%10] = flag[def%10] = 1; int ghi = 3*abc; flag[ghi/100] = flag[ghi/10%10] = flag[ghi%10] = 1; if(flag[0] == 0) { sort(flag,flag+10); if(flag[1] != 0) { printf("%d %d %d\n", abc, def, ghi); } } } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复