《C語言名題精選百則----7》

這次終於遇到點挑戰了,先上題目吧:





我的答案:

// 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調用之前先判斷是不是有重複再進行輸出。


但是我沒有這麼做,因爲即使這樣,我寫的程序也不是最簡便的,還有很多簡化的方法。甚至可以不用計算機將所有數據分析出來。

標準答案我也不貼了,如果想要的人多的話我就敲一遍。

我想說的是,推理能力不是一時半會可以煉出來的,像柯南同學那樣的真是太少了。

再說我覺得也沒什麼必要都分析出來,如果是考場上的話,我寧可讓計算機多算一些時間,也不浪費自己的時間。

一家之言而已。

發佈了47 篇原創文章 · 獲贊 10 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章