习题2-6排列

small_rain 发表于 5天前 · 关联问题 排列

#include <stdio.h> //习题2-6 //有点好玩,先要人脑预处理 //思路: // 1.ghi最大值是987,987/3=329,确定abc的最大值。 // 2.先按abc, abc*2, abc*3去凑数。(有bug,倍数时会出现数字0,在checking函数中要额外去掉) // 3.2中凑出来的数交给一个checking函数去判断这3个数有无重复数字 // 4.checking函数把3个数字拆了,丢到数字里,然后遍历这个数组检查重复值 bool checking(int abc, int def, int ghi) { int a, b, c, d, e, f, g, h, i; a = abc / 100, b = abc / 10 % 10, c = abc % 10; d = def / 100, e = def / 10 % 10, f = def % 10; g = ghi / 100, h = ghi / 10 % 10, i = ghi % 10; int arr[] = { a, b, c, d, e, f, g, h, i }; for (int i = 0; i < 9; i++) { if(arr[i] == 0) return 0; for (int j = i + 1; j < 8; j++) if (arr[i] == arr[j]) return 0; } return 1; } int main() { int abc, def, ghi; for (int i = 123; i <= 329; i++) { abc = i; def = abc * 2; ghi = abc * 3; if (checking(abc, def, ghi)) printf("%d %d %d\n", abc, def, ghi); } return 0; }