题目:
用1,2,3,...9,组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。
解法一:
#include<stdio.h>
void result(int n,int &result_add,int &result_mul){
int i=n/100,j=n%100/10,k=n%10;
result_add+=i+j+k;
result_mul*=i*j*k;
}
int main(){
for(int i=123;i<=329;i++){
int j=i*2,k=i*3;
int 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;
}
这里主要用到了1-9所有数字之和为45,所有数字之积为362880
解法二:
#include<stdio.h>
#include<string.h>
int main(){
for(int i=123;i<=329;i++){
int temp=i*1000000+i*2*1000+i*3;
char s[10];
sprintf(s,"%d",temp);
int j=0;
for(int k='1';k<='9';memchr(s,k++,9)&&j++);
if(j==9)
printf("%d %d %d\n",i,i*2,i*3);
}
return 0;
}
这里面主要用到了sprintf把整型数写到字符数组中;memchr在前9位中寻找k并返回位置指针,寻找失败则返回null。这里面若返回null,则由逻辑运算符的运算方法可知j++不会执行,当j=9说明1到9每个数都在数组中能找到。