1,2,3……,9組成3個三位數abc,def和ghi,每個數字恰好使用一次,要求abc:def:ghi=1:2:3.輸出所有解的兩種解法
阿新 • • 發佈:2019-01-29
解法1:
#include<iostream> #include<cstdio> using namespace std; void result(int num, int &result_add, int &result_mul) { int i, j, k; i = num / 100; //百位 j = num / 10 % 10; //十位 k = num % 10; //個位 result_add += i + j + k; //分解出來的位數相加 result_mul *= i * j * k; //相乘 } int main() { int i, j, k; int result_add, result_mul; for(i = 123; i <=329; i++) { j = i * 2; k = i * 3; result_add = 0; result_mul = 1; result(i, result_add, result_mul); result(j, result_add, result_mul); result(k, result_add, result_mul); if(result_add == 45 && result_mul == 362880) printf("%d %d %d\n", i, j, k); } return 0; }
解法2:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int main(int argc, const char * argv[]) { int n, i, j; char a[10];//陣列定義比實際大一些 for(n = 123; n < 330; n++) { sprintf(a, "%d", n * 1000000 + n * 2 * 1000 + n * 3);//將abcdefghi存入到字串a中 for(j = 0, i = '1'; i <= '9'; memchr(a, i++, 9) && j++);//比較1到9,用j記錄。當字元陣列a中沒有i對應的字元時,根據短路原則,j++不執行,迴圈過後,j將不等於9 if (j == 9) { printf("%d %d %d \n", n, n * 2, n * 3); } } return 0; }