解题思路:
因为:a, b, c三数成比例,且1-9均只能使用一次。所以可以采用遍历的方式,从123遍历到329.
遍历之后,验证是否1-9均只使用了一次,是则输出,否则进入下一次循环。
这里采用hash表的方式,1-9数字作为key。
注意事项:
检验hash表时,特别注意0的检验,不能使用0;
参考代码:
//1518: 寻找三位数 #include <stdio.h> int main() { int a, b, c, i , j, t = 1; // 1-9, 9位数中最大的三位数是 987, 所以最大的a是329; for( i = 123 ; i < 330 ; i++ ) { // 对标记进行初始化 t = 1; int hash[10] = {0}; // 对a, b, c进行赋值 a = i; b = 2 * a; c = 3 * a; // 将a, b, c的三位数装入hash表中 j = a % 10; hash[j] ++; j = a / 10 % 10; hash[j] ++; j = a / 100; hash[j] ++; j = b % 10; hash[j] ++; j = b / 10 % 10; hash[j] ++; j = b / 100; hash[j] ++; j = c % 10; hash[j] ++; j = c / 10 % 10; hash[j] ++; j = c / 100; hash[j] ++; // 检验hash表中的0值是否被使用,是则进行下一次循环 if( hash[0] != 0 ) continue; // 检验hash表,如果hash表中的值都为1,则表示每个数字均只用过一次。 // 即,hash表中若有一值 != 1,就 break. for( j = 1; j < 10; j++) { if( hash[j] != 1 ) { t = 0; break; } } if( t == 1 ) printf("%d %d %d\n", a, b, c); } return 0; }
0.0分
0 人评分
拆分位数 (C语言代码)浏览:1327 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:685 |
C语言程序设计教程(第三版)课后习题7.5 (C语言代码)浏览:856 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:542 |
C语言训练-自由落体问题 (C语言代码)浏览:615 |
用筛法求之N内的素数。 (C语言代码)浏览:664 |
P1000 (C语言代码)浏览:877 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:549 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:561 |