這次終於遇到點挑戰了,先上題目吧:
我的答案:
// trente.c
#include<stdio.h>
void test(int testnum,int limit);
void print();
int v,i,n,g,t,c,q,r,e;
int main()
{
t = 1;
r = 0;
v = 8;
i = 4;
test(9,9);
i = 9;
test(5,7);
v = 9;
i = 4;
test(2,3);
test(5,7);
return 0;
}
void test(int testnum,int limit)
{
int counti = 0;
int countj = 0;
int qa[] = {2,3,4};
int ea[] = {5,7,9};
int ga[] = {3,5,9};
int na[] = {9,8,6};
c = testnum;
while(c <= limit)
{
for(counti = 0;counti < 2;counti++)
{
q = qa[counti];
e = ea[counti];
for(countj = 0;countj < 2;countj ++)
{
g = ga[countj];
n = na[countj];
if(v * 10000 + i * 1000 + n * 100 + g * 10 + 1 + 2 * (c * 1000 + i * 100 + n * 10 + q ) == 100000 + e * 1000 + n * 100 + t * 10 + e)
{
//test to protect from repeat
print();
}
}
}
c++;
}
}
void print()
{
printf(" %d%d%d%d%d\n",v,i,n,g,t);
printf(" %d%d%d%d\n",c,i,n,q);
printf("+ %d%d%d%d\n",c,i,n,q);
printf("---------\n");
printf("%d%d%d%d%d%d\n",t,r,e,n,t,e);
printf("\n\n");
}
先說一句,問題我並沒有完全解決,因爲輸出的答案中這九個數之間會有重複,而題目是不允許重複的。
那麼想要正確答案的話就要在print調用之前先判斷是不是有重複再進行輸出。
但是我沒有這麼做,因爲即使這樣,我寫的程序也不是最簡便的,還有很多簡化的方法。甚至可以不用計算機將所有數據分析出來。
標準答案我也不貼了,如果想要的人多的話我就敲一遍。
我想說的是,推理能力不是一時半會可以煉出來的,像柯南同學那樣的真是太少了。
再說我覺得也沒什麼必要都分析出來,如果是考場上的話,我寧可讓計算機多算一些時間,也不浪費自己的時間。
一家之言而已。