解题思路:
首先明确问题:题目要求从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 人评分
简单的a+b (C语言代码)浏览:764 |
C语言程序设计教程(第三版)课后习题6.1 (C语言代码)浏览:702 |
【出圈】 (C语言代码)浏览:824 |
C语言程序设计教程(第三版)课后习题7.1 (C语言代码)浏览:539 |
C语言程序设计教程(第三版)课后习题5.7 (Java代码)浏览:910 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:644 |
C语言程序设计教程(第三版)课后习题8.2 (C语言代码)浏览:5275 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:818 |
WU-C语言程序设计教程(第三版)课后习题12.1 (C++代码)浏览:1024 |
最小公倍数 (C语言代码)浏览:1107 |