最近开始了看算法经典入门,这本书真的讲得很生动有趣,后面的二叉树、图等结构的解析也很到位,在看的过程中不知不觉就学了很多c语言的知识。需要好好消化这本书。
习题2-10 排列,用1,2,3,...,9组成3个三位数abc, def, ghi, 每个数字恰好使用一次,要求abc:def:ghi=1:2:3。输出所有解。
采用枚举的方法做这道题,我们可以知道,1-9的总和SUM以及总积PROD是一定的。
#include
void result(int num, int &resAdd, int &resMul){
int i,j,k;
i=num/100;
j=num/10%10;
k=num%10;
resAdd+=i+j+k;
resMul*=i*j*k;
}
int main(void) {
const int SUM=45, PROD=1*2*3*4*5*6*7*8*9;
int resAdd, resMul, j,k;
for(int i=123; i<=329; i++){
j=i*2;
k=i*3;
resAdd=0, resMul=1;
result(i,resAdd,resMul);
result(j,resAdd,resMul);
result(k,resAdd,resMul);
if(resAdd==SUM && resMul==PROD)
printf("%d, %d, %d\n",i,j,k);
}
}
- 其中,i:j:k=1:2:3。循环条件中,123为1-9能组合的最小值,329为最大值987/3的结果
- result的作用是计算每次循环的 和resAdd & 积resMul,用于判断是否每个数字恰好使用一次。
勿忘初心。
2019/5/9