User Tools

Site Tools


李宗樺:我的台大培訓

葉正聖老師: 建議 0900等題的程式碼可以修改一下,把有錯誤的程式碼收在類似 :李宗樺:我的台大培訓:曾經失敗的程式碼 之類的地方。 這樣的話你的這一頁會比較容易閱讀(老師容易找到你成功哪幾題,失敗哪幾題),而且可以好好地寫一些自己的成功的心得記錄。不然連續的錯誤版本,反而佔了你的版面太多,而會影響到你的自信心及心情。(2010-08-22)

0001:A+B Problem

http://acm.csie.org/ntujudge/problem.php?id=1

#include <iostream>
using namespace std;

int main()
{
	int a,b;
	cin>>a>>b;
	cout<<a+b;
	//system("pause");	//上傳前須註解此行
	return 0;
}

0002:Gold Coins

http://acm.csie.org/ntujudge/problem.php?id=2

此題規律如下:(與0754:Self­describing Sequence比較)
1
2 2
3 3 3
4 4 4 4
5 5 5 5 5
6 6 6 6 6 6
//SID:33436 , Status:Accepted , Submit:2010-08-02 15:20:42
//2010.8.2  完成版  (通過題目測資&線上系統)
#include <stdio.h>
#include <stdlib.h>
int main()
{
	int i,j,k,n;
	for(;;)
	{
		scanf("%d",&n);
		if(n>0)
		{
			int m=1,coin=0,time=0,day=n;
			for(j=0;j<day;j++)
			{
				for(k=0;k<=j;k++)
				{
					coin+=m;
					time++;
					if(time==day)
						break;	
				}
				m++;
				if(time==day)
					break;	
			}
			printf("%d %d\n",day,coin);
		}
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0003:Shortest Prefixes

http://acm.csie.org/ntujudge/problem.php?id=3

//不清楚字首縮寫的定義
//且此題通過率僅51%
//目前先跳過...

0004:Squares

http://acm.csie.org/ntujudge/problem.php?id=4

1.完成不定數存入座標點。
2.完成計算所有可能連成的線段長。
3.若座標點非按照順時針或逆時針,如何判斷哪一線段為我要找的正方形之一邊?
4.目前若要用4邊長相等來判定形成正方形時,若不只4點會出錯...
5.算出角度也有相同問題,怎麼判定哪些點是我要找的?
//未完成...
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
	int i,j,n;
	for(;;)
	{
		cin>>n;
		int square=0;
		if(n>0)
		{
			vector<int>x(n);
			vector<int>y(n);
			vector<double>l(n*(n-1));
			for(i=0;i<n;i++)
			{
				cin>>x[i]>>y[i];
				cout<<"point "<<i<<"  x="<<x[i]<<"  y="<<y[i]<<endl;	
			}
			for(i=0;i<n;i++)
			{
				for(j=1;j<n;j++)
				{
					l[i]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
					cout<<i<<" "<<j<<"線段長"<<" "<<l[i]<<endl;
				} 
			}
			//cout<<"排序線段長 \n"; 
		}
		else
			break;
	}
	system("pause");
	return 0;	
}
//未完成...
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
int main()
{
	int i,n;
	for(;;)
	{
		cin>>n;
		int square=0;
		if(n>0)
		{
			vector<int>x(n);
			vector<int>y(n);
			vector<double>l(n-1);
			for(i=0;i<n;i++)
			{
				cin>>x[i]>>y[i];
				cout<<"x="<<x[i]<<"y="<<y[i]<<endl;	
			}
			for(i=0;i<n-1;i++)
			{
				l[i]=sqrt((x[i]-x[i+1])*(x[i]-x[i+1])+(y[i]-y[i+1])*(y[i]-y[i+1]));
				cout<<i<<" "<<l[i]<<endl;
			}
			cout<<"排序線段長 \n"; 
		}
		else
			break;
	}
	system("pause");
	return 0;	
}

0005:Longest Common Subsequence

http://acm.csie.org/ntujudge/problem.php?id=5

1.讀入一整數n後,接著輸入n行字串。
2.比較此n行字串中,出現最長的相同字串。
3.輸出每筆資料的最大相同字串長度。
4.字串處理的函式用起來還是很不順手,目前卡在如何比較不同的字串位置。
#include <iostream>
using namespace std;
int main()
{
	char str1[2000],*str2[2000],str3[2000];
	int i,j,n;
	for(;;)
	{
		cin>>n;
		str2[0]=str1;
		if(n>0)
		{
			for(i=0;i<n;i++)
			{
				cin>>str2[i];
				str2[i+1]=str2[i]+strlen(str2[i]+2);	
			}
			for(i=0;i<n;i++)
				for(j=i;j<n;j++)
					if(strcmp(str2[i],str2[j])>0)
						//str3=strcpy(str2,strcmp(str2[i],str2[j]));

			cout<<strlen(str3)<<endl;
		}
		else
			break;
	}
	system("pause");
	return 0;	
}

葉正聖老師: 小心,當一題題在解台大的題庫時,極容易會有很深的挫折感。老師本身在解題目時也很容易卡住。 而且因為背景常識還缺不少,所以思考上很不容易剛好想到。(請想像,在二三十年前,可能某個演算法就是某人的碩士論文或是博士論文。) 建議要反過來思考: 先不要一題題做,而可以多看。同時在這一個階段(練習10幾題左右),要改練習”上網找答案抄想法”。因為別人的論文也 是先去找相關文獻後,再去看看能不能用類似的想法去應用在其他類似上面。所以現階段 “站在巨人的肩膀上” 抄想法很重要。經過一些題目 及解法的耳濡目染之後,就可以再進入下一個階段: 自己想解法。

我:今天看了3題,1題沒頭緒,2題後來又卡住,還真是很有挫折感,另外我在想0900的dog可能光判定"d"和"D"是不夠的,
或許要換成完整的字串判定,才能有正確的輸出。例如:輸入DD 123 456 789,正解可能是SAFE。只判定字元'D'就會印出789。
我認為應該是這部分出問題。

葉正聖老師: 關於貓狗大戰的這題,老師是只判斷 'd' 及 'D' 就成功了。我要說的是,我所有的判斷大約就是你後來詳列的那幾項,但是我發現你的程式碼已經亂了,所以與你所列出來的判斷不一致,因此才建議你重新看條件後重寫。 台大集訓
另外你的這一頁也有點亂掉,導致閱讀編寫不易,也建議重新編排後,會讓你的內心重新靜下來再出發。
因為就像線上遊戲時,越級打怪的經驗值及掉寶會越好,但是除非有高手罩,不然容易新手掛掉。你可以打個電話與老師聊聊,老師指點帶一下,會進步神速,而且能早點跨越挫折,迎向新世界。(8/3)

0006:Good Problem

http://acm.csie.org/ntujudge/problem.php?id=6

//類似第5題的字串比較,至少比較3筆字串
//未完成...
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
	char str1[20000],*str2[20000],str3[20000];
	int i,j,n;
	for(;;)
	{
		cin>>n;
		str2[0]=str1;
		if(n>=3)	//最少比較3個字串 
		{
			for(i=0;i<n;i++)
			{
				cin>>str2[i];
				str2[i+1]=str2[i]+strlen(str2[i]+2);	
			}
			for(i=0;i<n;i++)
				for(j=i;j<n;j++)
					if(strcmp(str2[i],str2[j])>0)
						//str3=strcpy(str2,strcmp(str2[i],str2[j]));

			cout<<strlen(str3)<<endl;
		}
		else
			break;
	}
	system("pause");
	return 0;	
}

0007:Blackjack

http://acm.csie.org/ntujudge/problem.php?id=7

葉正聖老師: atoi() 可以把某個字串轉成整數。所以的確如果有許多字串,就要準備好對映的字串以便轉換。另外印象中這一題可以做。

葉正聖老師: 恭喜完成 0007 Blackjack 題。相信在解題或重寫的過程,會進步很多。最後 Accept 的紅色字樣,相信是繼續下去最好的動力。

//SID:33546 , Status:Accepted , Submit:2010-08-06 17:27:32
//2010.8.6  完成版  (通過題目測資&線上系統)
//Version: 2.0
#include <stdio.h>
#include <stdlib.h>

int CTV(char card)	//Card To Value
{
	int value=0;
	if(card=='T' || card=='J' || card=='Q' || card=='K')
		value=10;
	else if(card=='A')
		value=11;
	else
		value=card-'0';
	return value;	
}

int bj(int c1,int c2)	//Blackjack
{
	int point2=c1+c2;
	if(point2>21)
		point2=12;
	return point2;
}

int main()
{
	int i,j,k,n;
	char card1[10],card2[10],card3[10];
	char table[14]="A23456789TJQK";
	for(;;)
	{
		scanf("%d",&n);
		int win=0;
		if(n>0)
		{
			scanf("%s %s %s", card1, card2, card3);
			int point1=CTV(card1[0]),point2=bj(CTV(card2[0]),CTV(card3[0]));
			//printf("n=%d  card1=%c  card2=%c  card3=%c\n",n,card1[0],card2[0],card3[0]);
			//printf("vcard1=%d  vcard2=%d  vcard3=%d\n",CTV(card1[0]),CTV(card2[0]),CTV(card3[0]));
			//printf("point1=%d  point2=%d",point1,point2);
			
			for(i=0;i<n;i++)
				for(j=0;j<4;j++)
					for(k=0;k<13;k++)		
						if(point2>bj(CTV(card1[0]),CTV(table[k])))
							win++;			
			//printf("  win=%d",win);
			
			if(point2>bj(CTV(card1[0]),CTV(card1[0])))
				win--;
			if(point2>bj(CTV(card1[0]),CTV(card2[0])))
				win--;
			if(point2>bj(CTV(card1[0]),CTV(card3[0])))
				win--;			
			//printf("  truewin=%d\n",win);
			
			double p=win/(52*n-3.0)*100;	
			printf("%5.3lf%%\n", p);
		}
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
//判斷有誤,win的例外條件有錯...
//寫的很糟的判斷方式,換成function可以省很多程式碼
//我覺得應該是不會過,所以還沒上傳...
//2010.8.5  
//Version: 1.0
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char card1[10],card2[10],card3[10];
	int i,j,k,n,findA=0,findA2=0;
	for(;;)
	{
		scanf("%d",&n);
		int point1=0,point2=0,win=0;
		if(n>0)
		{
			scanf("%s %s %s", card1, card2, card3);
			//printf("n=%d c1=%s c2=%s c3=%s\n",n,card1,card2,card3);	
			if(card1[0]>='0' && card1[0]<='9')
			{
				point1+=atoi(card1);
			//	printf("c1=%d  ",atoi(card1));
			}
			
			if(card2[0]>='0' && card2[0]<='9')
			{
				point2+=atoi(card2);
			//	printf("c2=%d  ",atoi(card2));
			}
			
			if(card3[0]>='0' && card3[0]<='9')
			{
				point2+=atoi(card3);
			//	printf("c3=%d  ",atoi(card3));
			}
	
			if(card1[0]=='T' || card1[0]=='J' || card1[0]=='Q' || card1[0]=='K')	
				point1+=10;
			if(card2[0]=='T' || card2[0]=='J' || card2[0]=='Q' || card2[0]=='K')
				point2+=10;
			if(card3[0]=='T' || card3[0]=='J' || card3[0]=='Q' || card3[0]=='K')
				point2+=10;
						
			if(card1[0]=='A')
			{
				point1+=11;
				findA++;
			}	
			if(card2[0]=='A')
				findA2++;
				
			if(card3[0]=='A')
				findA2++;
		
			//printf("findA=%d\n",findA); 
			while(findA2>0)
			{
				if(point2<11)
				{
					point2+=11;
					findA2--;	
				}
				else
				{
					point2+=1;
					findA2--;	
				}	
			}
			//printf("point1=%d  point2=%d\n",point1,point2);
			int p1=point1,findc1=0,findc2=0,findc3=0;
			for(i=0;i<n;i++)
				for(j=0;j<4;j++)
					for(k=1;k<=13;k++)
					{
						if(findc1==0 && atoi(card1)==k)
							findc1=1;
						if(findc2==0 && atoi(card2)==k)
							findc2=1;
						if(findc3==0 && atoi(card3)==k)
							findc3=1;
						
						if(findc1==0 && card1[0]=='A' && k==1)
							findc1=1;
						if(findc2==0 && card2[0]=='A' && k==1)
							findc2=1;
						if(findc3==0 && card3[0]=='A' && k==1)
							findc3=1;
						
						if(findc1==0 && card1[0]=='T' && k==10)
							findc1=1;
						if(findc2==0 && card2[0]=='T' && k==10)
							findc2=1;
						if(findc3==0 && card3[0]=='T' && k==10)
							findc3=1;
							
						if(findc1==0 && card1[0]=='J' && k==11)
							findc1=1;
						if(findc2==0 && card2[0]=='J' && k==11)
							findc2=1;
						if(findc3==0 && card3[0]=='J' && k==11)
							findc3=1;
							
						if(findc1==0 && card1[0]=='Q' && k==12)
							findc1=1;
						if(findc2==0 && card2[0]=='Q' && k==12)
							findc2=1;
						if(findc3==0 && card3[0]=='Q' && k==12)
							findc3=1;
							
						if(findc1==0 && card1[0]=='K' && k==13)
							findc1=1;
						if(findc2==0 && card2[0]=='K' && k==13)
							findc2=1;
						if(findc3==0 && card3[0]=='K' && k==13)
							findc3=1;
								
						point1=p1;
						int addpoint=0;
						if(k>=10)
							addpoint+=10;
						else if(point1<11 && k==1)
							addpoint+=11;
						else
							addpoint+=k;
						
						point1+=addpoint;
						if(point2>point1)
						{
							win++;
						//	printf("win  ");
						}
						//printf("point1=%d  point2=%d  addpoint=%d\n",point1,point2,addpoint);
					}
			//printf("win=%d\n",win);
			int FindSameCard=findc1+findc2+findc3;
			if(win>FindSameCard)
				win-=FindSameCard;
			//printf("TRUEwin=%d\n",win);
			double p=win/(52*n-3.0)*100;
			if(p>100)
				p=100;
			printf("%5.3lf%%\n", p);		
		}
		else
			break;
	}	
	system("pause");
	return 0;	
} 
//完成輸入
//WIN的判斷?減去輸的組合?
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char card1[10],card2[10],card3[10];
	int i,j,k,n,findA=0,findA2=0;
	for(;;)
	{
		scanf("%d",&n);
		int point1=0,point2=0,win=0;
		if(n>0)
		{
			scanf("%s %s %s", card1, card2, card3);
			printf("n=%d c1=%s c2=%s c3=%s\n",n,card1,card2,card3);
			
			if(card1[0]>='0' && card1[0]<='9')
			{
				point1+=atoi(card1);
			//	printf("c1=%d  ",atoi(card1));
			}
			
			if(card2[0]>='0' && card2[0]<='9')
			{
				point2+=atoi(card2);
			//	printf("c2=%d  ",atoi(card2));
			}
			
			if(card3[0]>='0' && card3[0]<='9')
			{
				point2+=atoi(card3);
			//	printf("c3=%d  ",atoi(card3));
			}
	
			if(card1[0]=='T' || card1[0]=='J' || card1[0]=='Q' || card1[0]=='K')
			{	
				point1+=10;
			}
			if(card2[0]=='T' || card2[0]=='J' || card2[0]=='Q' || card2[0]=='K')
				point2+=10;
			if(card3[0]=='T' || card3[0]=='J' || card3[0]=='Q' || card3[0]=='K')
				point2+=10;
						
			if(card1[0]=='A')
			{
				point1+=11;
				findA++;
			}	
			if(card2[0]=='A')
				findA2++;
				
			if(card3[0]=='A')
				findA2++;
		
			//printf("findA=%d\n",findA); 
			while(findA2>0)
			{
				if(point2<11)
				{
					point2+=11;
					findA2--;	
				}
				else
				{
					point2+=1;
					findA2--;	
				}	
			}
			printf("point1=%d  point2=%d\n",point1,point2);
			int p1=point1;
			for(i=0;i<n;i++)
				for(j=0;j<4;j++)
					for(k=1;k<=13;k++)
					{
						point1=p1;
						int addpoint=0;
						if(k>=10)
							addpoint+=10;
						else if(point1<11 && k==1)
							addpoint+=11;
						else
							addpoint+=k;
						
						point1+=addpoint;
						if(point2>point1)
						{
							win++;
							printf("win  ");
						}
						printf("point1=%d  point2=%d  addpoint=%d\n",point1,point2,addpoint);
						
					}
			printf("win=%d\n",win);
			
		}
		else
			break;
	}	
	system("pause");
	return 0;	
} 
//因為最後要輸出小數點後3位的浮點數,所以想用C的語法
//不過C的atoi()效果好像跟C++不太一樣,沒有逐一輸出轉換後的整數,似乎只有轉換第一個?
//未完成...
#include <stdio.h>
#include <stdlib.h>
int main()
{
	char card[100];
	int i,n,findA=0;
	for(;;)
	{
		scanf("%d",&n);
		int point=0;
		if(n>0)
		{
			for(i=0;i<6;i++)
				scanf("%c",&card[i]);
			printf("n=%d\n",n);
			for(i=0;i<6;i++)
				printf("%c",card[i]);
			printf("\n");
			for(i=0;i<6;i++)
			{
				if(card[i]=='J' || card[i]=='Q' || card[i]=='K')
					point+=10;
				else if(card[i]>='0' && card[i]<='9')
				{
					point+=atoi(card);
					printf("%c=%d  ",card[i],atoi(card));
				}
				else if(card[i]=='A')
					findA++;
			}
			printf("findA=%d\n",findA); 
			while(findA>0)
			{
				if(point<11)
				{
					point+=11;
					findA--;	
				}
				else
				{
					point+=1;
					findA--;	
				}	
			}
			printf("point=%d",point);		
		}
		else
			break;
	}	
	system("pause");
	return 0;	
} 

葉正聖老師: 經過測試,的確C語言的 IO會比 C++ 還快。不過如果真的比較熟悉 C++ 的 cout 的話, 可以參考下面的程式片段。

	cout.precision(3);
	cout<<fixed<<98.878321<<'%'<<endl;
	cout<<98.878321<<'%'<<endl;

葉正聖老師: 老師相當欣賞,宗樺有持續不斷的毅力,這是成功最重要的關鍵。不用擔心程式寫不出來,老師願意幫你特訓,針對寫不出來的每一題,逐一特訓之後就都能寫出來了。重點是要曾經卡住寫不出來的挫折,特訓才會發生效果。
葉正聖老師: 因為程式設計有一些想事情的順序方法,清爽很重要,凡是變成示能掌控的局勢時,要隨時敢砍掉重練。如果有skype帳號的話,就可以來找老師線上特訓 台大集訓

0018:Sequence Sum Possibilities

http://acm.csie.org/ntujudge/problem.php?id=18

//SID:38331 , Status:Accepted , Submit:2010-09-30 21:18:10
//2010.9.30  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,k,n;
	cin>>n;
	vector<int>array(100000);
	for(i=1;i<array.size();i++)
		array[i]=array[i-1]+i;
	//for(i=0;i<array.size();i++)
	//	cout<<array[i]<<"  ";
	while(n--)
	{
		cin>>j>>k;
		int count=0;
		for(i=1;i<100000;i++)
		{
			if(k<=array[i])
				break;
			if((k-array[i])%(i+1)==0)
			{
				count++;
				//cout<<"i="<<i<<" array="<<array[i]<<endl;
			}
		}
		cout<<j<<" "<<count<<endl; 	
	}	
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0077:ICPC Score Totalizer Software

http://acm.csie.org/ntujudge/problem.php?id=77

剛剛我再找下一題通過率高的題目時,發現有重複的題目呢
偷偷看一下排名前面的人這個0077跟0098有沒有都上傳
大家都有傳XD,那我也換個方式寫,再交上去衝排名
另外我有看到老師的留言,目前除了練手感之外,我會試著再找一些新題型

葉正聖老師: 看到排名又努力往上跳一格,相信你的心中一定衝滿喜悅興奮的成就感。這種競爭得勝的感覺,就是進步的重要動力。 當然,被追過去的台大學生一定也會不甘心地再追回來。所以在衝排名,要有心裡準備,可能要衝兩名掉一名,把沈睡的台大學生幹掉即可。 (老師去年有衝到30名,放著不動(沈睡不上線)就掉下來了)。 當排名及題目都衝不上去時,下一個階段自己學程式的方法,可以是去看看老師以前寫過的題目,judges status 裡面會有當時的舊程式碼,表示一定是對的。或許也可以練到幾招。

//SID:33897 , Status:Accepted , Submit:2010-08-08 10:44:48
//2010.8.8  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,n;
	while(1)
	{
		cin>>n;
		if(n>0)
		{
			vector<int>array(n);
			int max=-32768,min=32767,other[2],sum=0;	
			for(i=0;i<n;i++)
			{
				cin>>array[i];
				if(array[i]>max)
				{
					max=array[i];
					other[0]=i;
				}
				if(array[i]<min)
				{
					min=array[i];
					other[1]=i;	
				}	
			}	
			for(i=0;i<n;i++)
				sum+=array[i];			
			cout<<(sum-array[other[0]]-array[other[1]])/(n-2)<<endl;
		}
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0098:ICPC Score Totalizer Software

http://acm.csie.org/ntujudge/problem.php?id=98

葉正聖老師: 參加比賽最重要的是要先有選題眼。因為答對一題難題vs.答對一題簡單題,都是答對一題,越早寫出來分數越高。所以恭嘉你答對並選對題目,也謝謝你幫老師排名往上一名。 其實老師以前放假很閒時,就會坐在電腦前面狂寫程式,程式能力便能一直進步。下週四的程式集訓,老師要帶你們看看台大集訓班的作業1的題目,因為他們每週都有出很多題作業,台大老師不講解, 學生要想辦法自己做出來(或是去找到、問到答案),所以進步的速度都會特別快 (比較:如果教練老師教一題學生才去寫一題,則學生不一定寫得出那題之外,進度也真的會太慢)

這題是通過率很高的一題,因此我剛剛試著寫了一下就通過了
而且是老師以前沒寫過的一題
所以排名成績有上升呢
Rank:46 , Solved:77 , Submission:480
Rank:45 , Solved:78 , Submission:481
看到名次上升還真有成就感^^ (雖然這題不難啦)
PS:經過了今天Practice 2010-08-07兩點到七點的比賽,又回到Rank:46

葉正聖老師: 先挑簡單題練手感,同時可以提昇一些排名增加成就感。而老師在集訓時的目標,則是幫忙把卡住的題目講解一下。其實網路上有些題目的解法有人會分享出來,而那些解法就是你們要能十拿九穩的題目類型。 比如說, 本週台大HW1中的C題 (0911 Problem C - NTUJ homework assignment)很多人解出來,但是這題其實不簡單,解法卻是在 PTC 線上教學影片的第一題 (Children's Amusement) 有教到 Johnson's Rule 可以快速且正確地解 schedule 問題。既然都有正確快速的解法,就先學一下,學了以後再解 (還是不好解哦!不過等於是會新的題目的意思),效果會很不錯。練程式的原則是,舊題目類型的題目是衝積分排名及手感用的,新題目類型則是學習新知識讓自己會更多題目用的。選題眼則是,能在題目中挑到已經會寫的舊類型 (不需要新的技巧)。而用功的學生則是一直開發、尋找新的技巧,讓自己變得博學多閒,懂很多實戰型的演算法。

//SID:33583 , Status:Accepted , Submit:2010-08-07 11:53:13
//2010.8.7  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,n;
	for(;;)
	{
		cin>>n;
		vector<int>array(n);
		int max=-32768,min=32767,other[2],sum=0,finalsum=0,score;
		if(n>0)
		{
			for(i=0;i<n;i++)
			{
				cin>>array[i];
				if(array[i]>max)
				{
					max=array[i];
					other[0]=i;
				}
				if(array[i]<min)
				{
					min=array[i];
					other[1]=i;	
				}	
			}
			/*
			for(i=0;i<n;i++)
				cout<<i<<"="<<array[i]<<" ";	
			cout<<"\nmax="<<max<<" min="<<min<<endl;
			cout<<"admax="<<other[0]<<"  admin="<<other[1]<<endl;
			*/
			for(i=0;i<n;i++)
			{
				sum+=array[i];			
			}
			finalsum=sum-array[other[0]]-array[other[1]];
			//cout<<"sum="<<sum<<endl<<"final sum="<<finalsum<<endl;
			//cout<<"score="<<finalsum/(n-2)<<endl;
			cout<<finalsum/(n-2)<<endl;
		}
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0128:分「樹」

http://acm.csie.org/ntujudge/problem.php?id=128

葉正聖老師: 可以參考一下老師的要訣分析: 台大集訓示範 (2010-08-22)

//看出此題的規律,但是不知道從哪下手...
#include <iostream>
using namespace std;
int main()
{
	int m,n;
	while(1)
	{
		cin>>m>>n;
		if(m>0 && n>0)
		{
			cout<<"m="<<m<<"  n="<<n<<endl;
		}
		else
			break;	
	}
	system("pause");
	return 0;
}

0132:PS3

http://acm.csie.org/ntujudge/problem.php?id=132

葉正聖老師: 老師有把寫作的 心路歷程在程式碼中寫下來 給你參考一下。

//SID:34824 , Status:Wrong Answer , Submit:2010-08-21 14:18:47
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.21  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int n,i,j;	
	while(1)
	{
		cin>>n;
		int a[4000],b[4000],adlmax=-1,adlmin=-1;
		double l[4000],lmax=-32768,lmin=32767;
		if(n>0)
		{	
			for(i=0;i<n;i++)
			{
				cin>>a[i]>>b[i];
				l[i]=sqrt((a[i]-0)*(a[i]-0)+(b[i]-0)*(b[i]-0));
				//cout<<"point"<<i<<" "<<a[i]<<" "<<b[i]<<" "<<l[i]<<endl;
				if(l[i]>lmax)
				{
					lmax=l[i];
					adlmax=i;	
				}
				if(l[i]<lmin)
				{
					lmin=l[i];
					adlmin=i;	
				}
			}
			//cout<<"lmax="<<lmax<<"  adlmax="<<adlmax<<endl;
			//cout<<"lmin="<<lmin<<"  adlmin="<<adlmin<<endl;
			if(adlmin<adlmax)
				cout<<adlmin<<" "<<adlmax<<endl;
			else if(adlmin>adlmax)
				cout<<adlmax<<" "<<adlmin<<endl;
		}	
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int n,i,j;	
	while(1)
	{
		cin>>n;
		int a[4000],b[4000],l[4000],amin=32767,bmin=32767,lmax=-32768,adlmax=0;
		if(n>0)
		{
			for(i=0;i<n;i++)
			{
				cin>>a[i]>>b[i];
				if(a[i]<amin)
					amin=a[i];
				if(b[i]<bmin)
					bmin=b[i];
			}
			for(i=0;i<n;i++)
			{
				l[i]=sqrt((a[i]-a[i+1])*(a[i]-a[i+1])+(b[i]-b[i+1])*(b[i]-b[i+1]));
				cout<<"point"<<i<<" "<<a[i]<<" "<<b[i]<<" "<<l[i]<<endl;
			}
			for(i=0;i<n;i++)
			{
				for(j=1;j<n;j++)
				{
					l[i]=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j]));
					cout<<i<<" "<<j<<"線段長"<<" "<<l[i]<<endl;
					if(l[i]>lmax)
					{
						lmax=l[i];
						adlmax=i;
					}
				} 
			}

			cout<<"lmax="<<lmax<<"  adlmax="<<adlmax;
			cout<<"  amin="<<amin<<"  bmin="<<bmin;
		}	
		else
			break;
	}
	system("pause");
	return 0;	
}

0197:Rock, Paper, or Scissors?

http://acm.csie.org/ntujudge/problem.php?id=197

//SID:34307 , Status:Accepted , Submit:2010-08-13 16:51:19
//2010.8.13  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,n;
	cin>>n;
	for(i=0;i<n;i++)
	{
		int m,p1win=0,p2win=0;
		cin>>m;
		vector<char>p1(m);
		vector<char>p2(m);
		for(j=0;j<m;j++)
		{
			cin>>p1[j]>>p2[j];
			if((p1[j]=='R' && p2[j]=='S') || (p1[j]=='P' && p2[j]=='R') || (p1[j]=='S' && p2[j]=='P'))
				p1win++;
			else if((p1[j]=='R' && p2[j]=='P') || (p1[j]=='P' && p2[j]=='S') || (p1[j]=='S' && p2[j]=='R'))
				p2win++;	
		}
		/*
		for(j=0;j<m;j++)
			cout<<"p1 "<<p1[j]<<"    p2 "<<p2[j]<<endl;	
		cout<<"p1win="<<p1win<<"   p2win="<<p2win<<endl;
		*/
		if(p1win>p2win)
			cout<<"Player 1"<<endl;
		else if(p1win<p2win)
			cout<<"Player 2"<<endl;
		else if(p1win==p2win)
			cout<<"TIE"<<endl;	
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0243:Subsequence

http://acm.csie.org/ntujudge/problem.php?id=243

//SID:39340 , Status:Wrong Answer , Submit:2010-10-14 21:12:23
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.10.14  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int t,n,s,i;
	cin>>t;
	while(t--)
	{
		int count=0,test=0,sum=0,min=10000000;
		cin>>n>>s;
		vector<int>array(n);
		for(i=0;i<array.size();i++)
		{
			cin>>array[i];
			if(array[i]>s)
				min=1;
		}
		for(i=0;i<n;i++)
		{
			if(sum<s)
			{
				sum+=array[i];
				test++;
			}
			else
			{
				//cout<<"sum="<<sum<<endl;
				count++;
				if(test<min)
					min=test;
				//cout<<"min="<<min<<endl;
				sum-=array[i-test];
				test--;
				i--;
			}	
		}
		//cout<<"test="<<test<<endl;
		if(test==n && min>1)
		{
			min=n;
			int test2=0;
			while(sum-array[test2]>s)
			{
				sum-=array[test2];
				test2++;
				min--;
			}	
		}
		if(sum<s)
			cout<<"0"<<endl;
		else
			cout<<min<<endl;
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0304:LC-Display

http://acm.csie.org/ntujudge/problem.php?id=304

//未完成...
#include <iostream>
using namespace std;
int main()
{
	int n,i;
	char s[15];
	while(1)
	{
		cin>>n>>s;
		cout<<n<<endl<<s;
		if(n<1)
			break;
		for(i=0;i<15;i++)
		switch(s[i])
		{
			case 0:
			case 2:
			case 3:
			case 5:
			case 6:
			case 7:
			case 8:
			case 9:
				cout<<" ";
				for(i=0;i<n;i++)
					cout<<"-";
				cout<<"  ";
				break;
			case 1:
			case 4:
				cout<<" ";
				for(i=0;i<n;i++)
					cout<<" ";
				cout<<"  ";
				break;				
		}	
	}
	system("pause");
	return 0;	
}

0435:Lagrange's Four-Square Theorem

http://acm.csie.org/ntujudge/problem.php?id=435

果然用暴力法是會超時的
在做4層for-loop時,有稍微加快了一些,內層由
for(j=0;j<=sqrt(n);j++) → for(j=i;j<=sqrt(n);j++)
for(k=0;k<=sqrt(n);k++) → for(k=j;k<=sqrt(n);k++)
for(l=0;l<=sqrt(n);l++) → for(l=k;l<=sqrt(n);l++)
除了可以節省一些重複組合的判斷之外,還有降低執行次數
在做最大測資2^15=32768時,執行次數從 1,097,199,376 降到 47,239,010
不過光執行47,239,010次就超過1秒的限制了...
//SID:37357 , Status:Time Limit Exceeded , Submit:2010-09-12 10:17:31
//線上系統驗證失敗=>Time Limit Exceeded...要再修正...
//2010.9.12  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	int n,i,j,k,l,count,test;
	for(;;)
	{
		cin>>n;
		if(n==0)
			break;
		count=0;
		test=0;
		for(i=0;i<=sqrt(n);i++)
		{
			if(i*i==n)
			{
				//cout<<"i="<<i<<endl;
				count++;
			}
			for(j=i;j<=sqrt(n);j++)
			{
				if(i*i+j*j==n && i!=0)
				{
					//cout<<"i="<<i<<"  j="<<j<<endl;
					count++;
				}
				for(k=j;k<=sqrt(n);k++)
				{
					if(i*i+j*j+k*k==n && i!=0)
					{
						//cout<<"i="<<i<<"  j="<<j<<"  k="<<k<<endl;
						count++;
					}
					for(l=k;l<=sqrt(n);l++)
					{
						test++;			
						if(i*i+j*j+k*k+l*l==n && i!=0)
						{
							//cout<<"i="<<i<<"  j="<<j<<"  k="<<k<<"  l="<<l<<endl;
							count++;
						}
					}
				}
			}
		}	
		//cout<<"count="<<count<<endl;
		//cout<<"test="<<test<<endl;
		cout<<count<<endl;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	unsigned long long n,i,j,test;
	for(;;)
	{
		cin>>n;
		if(n==0)
			break;
		test=0;
		for(i=0;i<sqrt(n);i++)
			for(j=i;j<sqrt(n);j++)
				if(i*i+j*j==n)
				{
					cout<<"i="<<i<<"  j="<<j<<endl;
					test++;
				}	
		if(test==0)
			cout<<"none"<<endl;
		else
			cout<<"test end\n";
	}
	system("pause");
	return 0;	
}

0478:Easy Problem

http://acm.csie.org/ntujudge/problem.php?id=478

//SID:34318 , Status:Accepted , Submit:2010-08-13 18:19:46
//2010.8.13  完成版  (通過題目測資&線上系統)
//通過率100%的題目,用來衝排名...
#include <iostream>
using namespace std;
int main()
{
	cout<<"Pu-Jen Cheng"<<endl;
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0516:Finding Fraction

http://acm.csie.org/ntujudge/problem.php?id=516

//未完成...
//部分測資執行過慢...
#include <iostream>
using namespace std;
int main()
{
	int a[4],p,q,test;
	int i,j;
	while(scanf("%d %d %d %d",&a[0],&a[1],&a[2],&a[3])==4)
	{
		test=a[0];
		for(i=0;i<4;i++)	
			if(a[i]>test)
				test=a[i];
		test*=10;
		if(test>1000000000)
			test=1000000009;
		for(i=1;i<test;i++)
			for(j=test;j>=1;j--)
				if((a[0]/a[1]<i/j) && (i/j<a[2]/a[3]))
					printf("i=%d  j=%d\n",i,j);	
	}
	system("pause");
	return 0;	
}

0735:魔法部的任務

http://acm.csie.org/ntujudge/problem.php?id=735

因為此題還有一個關鍵沒寫出來,所以此題還沒上傳
如果下次任務距離大於發生時間時,表示該名"正氣師"來不及趕到現場
此時則再由"正氣師局"派出另一人前往處理
現在卡在如何判定前一名"正氣師"可再進行任務的交叉執行情況
若此判定沒寫出來,則表示來不及處理下一次任務的"正氣師"當天就結束工作
這樣就不符合題意使用最少人數的條件...
//2010.8.13  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int distance(int x1,int y1,int x2,int y2)
{
	int dx,dy;
	dx=x2-x1;
	dy=y2-y1;
	if(dx<0)
		dx*=-1;
	if(dy<0)
		dy*=-1;
	return dx+dy;
}
int main()
{
	int i,j,n;
	cin>>n;
	for(i=0;i<n;i++)
	{
		int m,people=1;
		cin>>m;
		vector<int>t(m);
		vector<int>x(m);
		vector<int>y(m);
		vector<int>d(m-1);
		for(j=0;j<m;j++)
		{
			cin>>t[j]>>x[j]>>y[j];
		}
		for(j=0;j<m;j++)
		{
			cout<<j<<".  t="<<t[j]<<"  x="<<x[j]<<"  y="<<y[j]<<endl;
		}
		for(j=0;j<m-1;j++)
		{
			d[j]=distance(x[j],y[j],x[j+1],y[j+1]);
			cout<<j<<".  d="<<d[j]<<"  dt="<<t[j+1]-t[j]<<endl;
			if((t[j+1]-t[j])<d[j])
			{
				people++;
				//如何判定多人輪流執行任務時的空檔? 
			}	
		}
		cout<<"people="<<people<<endl;		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0754:Self­describing Sequence

http://acm.csie.org/ntujudge/problem.php?id=754

此題規律如下:(與0002:Gold Coins比較)
 1
 2  2
 3  3
 4  4  4
 5  5  5
 6  6  6
 7  7  7  7
 8  8  8  8
 9  9  9  9
 10 10 10 10

發現錯誤:
正解→http://www.tcgs.tc.edu.tw/~sagit/luckycat/q10049.htm
//SID:37087 , Status:Accepted , Submit:2010-09-10 19:43:09
//2010.9.10  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	unsigned long long n,i,test;
	for(;;)
	{
		cin>>n;
		if(n==0)
			break;
		vector<unsigned long long>length(900000);
		vector<unsigned long long>start(900000);
		test=1;
		length[1]=1;
		start[1]=1;
		for(i=2;i<start.size();i++)
		{
			start[i]=start[i-1]+length[i-1];
			while(start[test]<i)
				test++;
			if(start[test]==i)
				length[i]=test;
			else if(start[test]>i)
				length[i]=test-1;	
		}
		for(i=1;i<=n;i++)
			if(start[i]<=n && start[i+1]>n)
			{
				cout<<i<<endl;
				break;
			}
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//測資在1,000,000,000時會出錯,直接關閉程式
//超出記憶體空間
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	unsigned long long n,k,i,j;
	for(;;)
	{
		cin>>n;
		vector<unsigned long long>array(n+10);
		if(n==0)
			break;	
		array[1]=1;
		array[2]=2;
		k=2;
		for(i=2;i<n+1;i++)
		{
			for(j=0;j<array[i];j++)
			{
				if(k==n+5)
					break;
				array[k]=i;
				k++;					
			}	
		}
		//for(i=0;i<n+1;i++)
		//	cout<<"array["<<i<<"]="<<array[i]<<endl;
		cout<<"array size="<<array.size()<<" k="<<k<<endl;
		cout<<"array["<<n<<"]="<<array[n]<<"  array["<<k-1<<"]="<<array[k-1] <<endl;
	}
	system("pause");
	return 0;	
}
//用0002:Gold Coins修改來完成上述規律
//但答案不是用這規律產生...
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,k,n;
	for(;;)
	{
		scanf("%d",&n);
		vector<int>array(n);
		if(n>0)
		{
			int m=1,coin=0,time=0,day=n,ans=1,test=0,final=0;
			for(i=0;i<day;i++)
			{
				for(j=0;j<=i;j++)
				{
					coin+=m;
					//printf("%d  ",m);
					for(k=0;k<m;k++)
					{
						printf("%d  ",ans);
						array[test]=ans;
						test++;
						//if(test==n+1)
							//break;
					}
					printf("\n");
					ans++;
					time++;
					if(time==day)
						break;	
				}
				printf("\n");
				m++;
				if(time==day)
					break;	
			}
			printf("%d %d\n",day,coin);
			for(i=0;i<array.size();i++)
				final+=array[i];
			printf("n=%d  final=%d\n",n,array[n]);
			
		}
		else
			break;
	}
	system("pause");	//上傳前須註解此行
	return 0;			
}
//未完成...
#include <iostream>
using namespace std;
int main()
{
	int i,j,k;
	for(i=1;i<10;i++)
		for(j=i;j<10;j++)
		{
			for(k=j;k<10;k++)
				cout<<i<<" ";
			cout<<endl;
		}
	system("pause");
	return 0;	
}

0756:淹水

http://acm.csie.org/ntujudge/problem.php?id=756

//SID:38099 , Status:Accepted , Submit:2010-09-26 16:23:53
//2010.9.26  完成版  (通過題目測資&線上系統)
//Version: 3.0
//可接受"窪地"測試
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,m,i,j;
	while(scanf("%d %d",&n,&m)==2)
	{		
		vector<int>h(n);
		vector<int>minw(n-m+1);
		for(i=0;i<n;i++)
			cin>>h[i];
		/*	
		for(i=0;i<n;i++)
			cout<<i<<".="<<h[i]<<"  ";
		cout<<endl;
		*/
		for(i=0;i<n-m+1;i++)
		{
			int min=h[i];
			for(j=i;j<i+m;j++)
			{
				if(h[j]<min)
					min=h[j];
				minw[i]=min;		
			}
			//cout<<"minw "<<i<<".="<<minw[i]<<endl;	
		}
		int ans=minw[0];
		for(i=0;i<n-m+1;i++)		
			if(minw[i]>ans)
				ans=minw[i];
		//cout<<"ans="<<ans<<endl;
		cout<<ans<<endl;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
//SID:36529 , Status:Wrong Answer , Submit:2010-09-02 17:12:59
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.2  完成版  (通過題目測資)
//Version: 2.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,m,i,j;
	while(scanf("%d %d",&n,&m)==2)
	{
		int ans=0;		
		vector<int>h(n);
		vector<int>minw(n-m+1);
		for(i=0;i<n;i++)
			cin>>h[i];
		/*	
		for(i=0;i<n;i++)
			cout<<i<<".="<<h[i]<<"  ";
		cout<<endl;
		*/
		for(i=0;i<n-m+1;i++)
		{
			int min=h[i];
			for(j=i;j<i+m;j++)
			{
				if(h[j]<min)
					min=h[j];
				minw[i]=min;		
			}
			//cout<<"minw "<<i<<".="<<minw[i]<<endl;	
		}
		for(i=0;i<n-m+1;i++)		
			if(minw[i]>ans)
				ans=minw[i];
		//cout<<"ans="<<ans<<endl;
		cout<<ans<<endl;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
//SID:34811 , Status:Wrong Answer , Submit:2010-08-21 12:56:22
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.21  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,m,i,j,ans=0;
	cin>>n>>m;
	vector<int>h(n);
	vector<int>minw(n-m+1);
	for(i=0;i<n;i++)
		cin>>h[i];
	//for(i=0;i<n;i++)
	//	cout<<i<<".="<<h[i]<<"  ";
	//cout<<endl;
	for(i=0;i<n-m+1;i++)
	{
		int min=100009;
		for(j=i;j<i+m;j++)
			if(h[j]<min)
			{
				min=h[j];
				minw[i]=min;
			}	
	//	cout<<"minw "<<i<<".="<<minw[i]<<endl;
	}
	for(i=0;i<n-m+1;i++)		
		if(minw[i]>ans)
			ans=minw[i];
	//cout<<"ans="<<ans<<endl;
	cout<<ans;
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0834:The 3n+1 problem

http://acm.csie.org/ntujudge/problem.php?id=834

上傳結果為意料中的Time Limit Exceeded
此題限制1秒內完成,且題目又有提到測資會很大很大
所以我另外想了兩個辦法要在下一版時更新
第一個是較正規的做法
在找最大cycle時,不應該一個一個去找,一定會花很多時間
要在找到前者出現過的cycle時,直接加進來
像是慢慢建一個table的做法,table中有值就直接引用,沒有的話再做運算
第二個是有點作弊的方法(不確定可行)
在自己電腦先執行1~max把table建好
傳上去時就只是做i~j的區間搜尋,找max值並印出

PS:if(a&1) 等價於 if(a%2==1)(有加速效果,直接使用邏輯運算比四則運算有效率) 
//SID:36981 , Status:Time Limit Exceeded , Submit:2010-09-07 18:45:16
//線上系統驗證失敗=>Time Limit Exceeded...要再修正...
//2010.9.7  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,k,test,test2,index,max;
	while(scanf("%d %d",&i,&j)==2)
	{
		//printf("i=%d j=%d\n",i,j);
		if(i>j)
			swap(i,j);
		vector<int>cycle(j-i+1);
		index=0;
		for(k=i;k<=j;k++)
		{
			test=1;
			test2=k;
			while(1)
			{
				if(test2%2==0)
					test2/=2;
				else
					test2=3*test2+1;
				test++;	
				if(test2==1)
					break;
			}
			cycle[index]=test;
			//printf("cycle %d = %d\n",index,cycle[index]);
			index++;	
		}
		max=cycle[0];
		for(k=0;k<cycle.size();k++)
			if(cycle[k]>max)
				max=cycle[k];
		printf("%d %d %d\n",i,j,max);	
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0884:Welcome to NTUJ 2010

http://acm.csie.org/ntujudge/problem.php?id=884

//未完成...
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
int main()
{
	char str[1000];
	char w[100]="Welcome to NTUJ 2010,",username[1000]="0000000000000000000000000000000000000123",title[1000]="Welcome",okmsg[1000]="OK";
	int n,n2,i,j,k,padding=2,wl,ul,tl,ol,max=0,l[4],space=0;
//	cin>>n;
	/*for(i=0;i<n;i++)
	{	
		cin>>n2;
		for(j=0;j<n2;j++)
		{
			cin.getline(str);	
		}
	//	vector<vector<>>str(n2)(1000);
		*/
	
		l[0]=wl=strlen(w);
		l[1]=ul=strlen(username);
		l[2]=tl=strlen(title);
		l[3]=ol=strlen(okmsg);
		for(i=0;i<4;i++)
		{
			if(l[i]>max)
				max=l[i];
		}
		cout<<max<<endl;
		//cout<<wl<<" "<<ul<<" "<<tl<<" "<<ol;
		//cout<<endl<<max;
		cout<<"+";
		for(i=0;i<max+2*padding;i++)
			cout<<"-";
		cout<<"+\n|"<<title;
		//space=max-2-tl;
		//for(i=0;i<space+2*(padding+1);i++)
		for(i=0;i<max+2*padding-tl-1;i++)
			cout<<" ";
		cout<<"X|\n";
		cout<<"+";
		for(i=0;i<max+2*padding;i++)
			cout<<"-";
		cout<<"+\n";
		cout<<"|";
		for(i=0;i<max+2*padding;i++)
			cout<<" ";
		cout<<"|\n|";
		for(i=0;i<padding;i++)
			cout<<" ";
		cout<<w;
		for(i=0;i<max-wl;i++)
			cout<<" ";
		for(i=0;i<padding;i++)
			cout<<" ";
		cout<<"|\n|";
		for(i=0;i<padding;i++)
			cout<<" ";
		cout<<username<<".";
		for(i=0;i<max-ul-1;i++)
			cout<<" ";
		for(i=0;i<padding;i++)
			cout<<" ";
		cout<<"|\n|";
		for(i=0;i<max+2*padding;i++)
			cout<<" ";
		cout<<"|\n|";
		for(i=0;i<padding;i++)
			cout<<" ";
		for(i=0;i<(max-4-ol)/2;i++)
			cout<<" ";
		cout<<"< "<<okmsg<<" >";
		for(i=0;i<(max-4-ol)/2;i++)
			cout<<" ";
		if(max%2==1)
			cout<<" ";
		for(i=0;i<padding;i++)
			cout<<" ";
		cout<<"|\n";
		cout<<"+";
		for(i=0;i<max+2*padding;i++)
			cout<<"-";
		cout<<"+\n";
		
		
		
		
//	}
	/*cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>n2;
		
		
	}*/
	//system("pause");	//上傳前須註解此行
	return 0;	
}

葉正聖老師: 建議這題砍掉重練,會進步得比較快。

0888:The lucky receipt

http://acm.csie.org/ntujudge/problem.php?id=888

//Version: 1.0
#include <iostream>
using namespace std;

int main()
{
	int i,j,n,m;
	char line[100];
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>line;
		//cout<<line;
		m=strlen(line);
		int test=0;
		for(j=m;j>0;j--)
		{
			if(line[j-1]!='8' && test==0)
			{
				cout<<"bang";				
				break;
			}
			else if(line[j-1]=='8')
			{
				cout<<"big";
				test++;
			}
			else if(line[j-1]=='.')
				break;		
		}
		cout<<endl;	
	}
	//system("pause");	//上傳前須註解此行 
	return 0;
}
//Version: 2.0
#include <iostream>
using namespace std;

int main()
{
	int i,j,n,m,k=0;
	char line[100],out[30000];
	cin>>n;
	//input
	for(i=0;i<n;i++)
	{
		cin>>line;
		//cout<<line;
		m=strlen(line);
		int test=0;
		for(j=m;j>0;j--)
		{
			if(line[j-1]!='8' && test==0)
			{
				//cout<<"bang";
				out[k]='b';
				k++;
				out[k]='a';
				k++;
				out[k]='n';
				k++;
				out[k]='g';
				k++;				
				break;
			}
			else if(line[j-1]=='8')
			{
				//cout<<"big";
				out[k]='b';
				k++;
				out[k]='i';
				k++;
				out[k]='g';
				k++;
				test++;
			}
			else if(line[j-1]=='.')
				break;		
		}
		//cout<<endl;
		out[k]='\n';
		k++;	
	}
	//output
	for(i=0;i<k;i++)
	{	
		cout<<out[i];	
	}
	//system("pause");	//上傳前須註解此行 
	return 0;
}

葉正聖老師: 通常不同的版本(version)如果要縮寫標示,會寫 ver. 1.0, ver. 2.0, 或著不縮寫更容易了解: version 1.0, version 2.0, 也有人寫 Version: 1.0 之類的。var. 1.0 就比較不適合了。 可以參考一些軟體的 Help-About 的寫法。你也可以有自己的風格寫法。
看到你有用心地一直寫程式一直練,尤其是 NTU Online Judge 及 其他的練習程式都有在做,進步會很快。你能多在wiki上面紀錄,老師便能看到你的成長及進步,而且能提供一些建議讓你越變越好。老師很高興能在這個機制下面和你一起成長,謝謝你。

0899:A+B problem

http://acm.csie.org/ntujudge/problem.php?id=899

//SID:34418 , Status:Accepted , Submit:2010-08-14 15:30:44
//2010.8.14  完成版  (通過題目測資&線上系統)
//用來衝排名...
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,n;
	cin>>n;
	vector<int>a(n);
	vector<int>b(n);
	for(i=0;i<n;i++)
	{
		cin>>a[i]>>b[i];
		cout<<a[i]+b[i]<<endl;	
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0900:Let the big dog eat

http://acm.csie.org/ntujudge/problem.php?id=900

葉正聖老師: 有個暗示,”是不是有些狀況沒考慮到? 要想清楚 SAFE 的狀況可能有很多,要看清楚題目”

修正Version: 5.0 的邊界設定 max=-1000000009,min=1000000009 即可通過
錯6次了阿~~~~~~~~~
1.出現"DOG"則印出最大的數字
2.出現"dog"則印出最小的數字
3.沒有"DOG"或"dog"則印出"SAFE"
4.同時有"DOG"與"dog"也印出"SAFE"
5.沒有任何整數時,沒有貓時也印出"SAFE"  =>  Version: 2.0 更新
6.只有一隻狗時,才會印出整數  =>  Version: 3.0 更新
7.(多隻"DOG")或(多隻"dog")也會互咬,印出"SAFE"  =>  Version: 3.0 更新
8.只有一隻狗且沒有貓時印出"SAFE",不論"DOG"或"dog"皆不會再印出cat的預設值  =>  Version: 4.0 更新
9.(多隻"DOG")或(多隻"dog")且沒有貓時,只印一次"SAFE"  =>  Version: 4.0 更新
10.修正"DOG"與"dog"各一隻時沒有輸出的錯誤  =>  Version: 5.0 更新
11.目前發現有一筆輸入資料會跟老師有不同的輸出,
   當輸入12 23 dd 34 45 老師的會印出12,我的會判定為有兩個"dog"並印出"SAFE"。
12.修正max與min的邊界判定,使單筆輸入最小值可大於32767,最大值可小於-32768  =>  Version: 6.0 更新
13.Version: 6.0 會因為輸入資料有0時,造成if(min==0 && max==0)錯誤,使判定最大最小會出錯。

葉正聖老師: 相信在多次嘗試中,你會發現思考會越來越周密。雖然系統只會顯示Accept/WrongAnswer,但你應一次次地發現自己越來越接近答案了。加油!不要放棄。差不多要正確了。
同時建議你,看到你的程式碼已經亂掉,這題既然理解越來越完整,重新寫一次或許答案就會正確了。太侷泥於已經連自己都不認識的程式碼,有可能會造成過門不入的尷尬結果。
我:我會重新想一次後,再試著重寫一個Version: 4.0,今天只有0002題有拿到1個AC,光是這題0900就有3次WA了。
寫這一題就加罰一小時啦 = =” ,我會確定這題正確再上傳第4次,多了3個WA對老師真不好意思XD
葉正聖老師: 能夠主動嘗試及練習破關,本身就是值得鼓勵的好事。只要不放棄,儘量WA也沒關係。因為破關的喜悅及正面的力量是無價的。以前你們林威辰學長也是在一開始的時候一直狂WA,但不放棄,一旦AC後,那整個爽度真的是筆墨難以形容,加油! 看起來就快要破關了。

//SID:33473 , Status:Wrong Answer , Submit:2010-08-04 15:02:08
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.4  完成版  (通過題目測資)
//Version: 6.0
#include <iostream>
using namespace std;

int main()
{
	char card[30000];
	int n,m,i,j,k;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		int dogs=0,bdog=0,sdog=0,max=0,min=0;
		for(j=0;j<m;j++)
		{
			cin>>card;		
			for(k=0;k<strlen(card);k++)
			{	
				if(card[k]=='d')         
				{
					sdog++;
					dogs++;
				}
				else if(card[k]=='D')
				{
					bdog++;
					dogs++;		
				}
				else if(card[k]<'A')
				{
					if(min==0 && max==0)
					{
						max=atoi(card);
						min=max-1;	
					}	
					if(atoi(card)>max)
						max=atoi(card);
					if(atoi(card)<min)
						min=atoi(card);
				}	 
			}	
		}
		if(dogs!=0)
		{
			if(sdog==1 && bdog==0 && min!=0)	//have only 1 small dog and have cats
				cout<<min<<endl;
			if(sdog==0 && bdog==1 && max!=0)	//have only 1 big dog and have cats
				cout<<max<<endl;	
			if(dogs>=2 || (max==0 && min==0))	//have dogs or haven't cat
				cout<<"SAFE\n";
		}
		else		//dog=0
			cout<<"SAFE\n";	
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//SID:33470 , Status:Wrong Answer , Submit:2010-08-04 10:26:08
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.4  完成版  (通過題目測資)
//Version: 5.0
#include <iostream>
using namespace std;

int main()
{
	char card[30000];
	int n,m,i,j,k;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		int dogs=0,bdog=0,sdog=0,max=-32768,min=32767;
		for(j=0;j<m;j++)
		{
			cin>>card;		
			for(k=0;k<strlen(card);k++)
			{	
				if(card[k]=='d')         
				{
					sdog++;
					dogs++;
				}
				else if(card[k]=='D')
				{
					bdog++;
					dogs++;		
				}
				else if(card[k]<'A')
				{
					if(atoi(card)>max)
						max=atoi(card);
					if(atoi(card)<min)
						min=atoi(card);
				}	 
			}	
		}
		if(dogs!=0)
		{
			if(sdog==1 && bdog==0 && min!=32767)	//have only 1 small dog and have cats
				cout<<min<<endl;
			if(sdog==0 && bdog==1 && max!=-32768)	//have only 1 big dog and have cats
				cout<<max<<endl;	
			if(dogs>=2 || (max==-32768 && min==32767))	//have dogs or haven't cat
				cout<<"SAFE\n";
		}
		else		//dog=0
			cout<<"SAFE\n";		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//SID:33469 , Status:Wrong Answer , Submit:2010-08-04 09:55:55
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.4  完成版  (通過題目測資)
//Version: 4.0
#include <iostream>
using namespace std;

int main()
{
	char card[30000];
	int n,m,i,j,k;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		int dogs=0,bdog=0,sdog=0,max=-32768,min=32767;
		for(j=0;j<m;j++)
		{
			cin>>card;		
			for(k=0;k<strlen(card);k++)
			{	
				if(card[k]=='d')         
				{
					sdog++;
					dogs++;
				}
				else if(card[k]=='D')
				{
					bdog++;
					dogs++;		
				}
				else if(card[k]<'A')
				{
					if(atoi(card)>max)
						max=atoi(card);
					if(atoi(card)<min)
						min=atoi(card);
				}	 
			}	
		}
		
		if(dogs!=0)
		{
			if(sdog==1 && bdog==0 && min!=32767)	//have only 1 small dog and have cats
				cout<<min<<endl;
			if(sdog==0 && bdog==1 && max!=-32768)	//have only 1 big dog and have cats
				cout<<max<<endl;	
			if(sdog>1 || bdog>1 || (max==-32768 && min==32767))//have small dogs or big dogs or haven't cat
				cout<<"SAFE\n";
		}
		else		//dog=0
			cout<<"SAFE\n";		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//SID:33441 , Status:Wrong Answer , Submit:2010-08-02 18:19:40
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.2  完成版  (通過題目測資)
//Version: 3.0
#include <iostream>
using namespace std;

int main()
{
	char card[300];
	int n,m,i,j,k;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		int dogs=0,bdog=0,sdog=0,max=-32768,min=32767;
		for(j=0;j<m;j++)
		{
			cin>>card;		
			for(k=0;k<strlen(card);k++)
			{	
				if(card[k]=='d')         
				{
					sdog++;
					dogs++;
				}
				else if(card[k]=='D')
				{
					bdog++;
					dogs++;		
				}
				else if(card[k]<'A')
				{
					if(atoi(card)>max)
						max=atoi(card);
					if(atoi(card)<min)
						min=atoi(card);
				}	 
			}	
		}
		
		if(dogs!=0)
		{
			if(sdog==1 && bdog==0)	//have only 1 small dog
				cout<<min<<endl;
			if(sdog==0 && bdog==1)	//have only 1 big dog
				cout<<max<<endl;	
			if(sdog>0 || bdog>0)	//have small dogs or big dogs
				cout<<"SAFE\n";
		}
		else if(max==-32768 && min==32767)	//cat=0
			cout<<"SAFE\n";	
		else		//dog=0
			cout<<"SAFE\n";		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//SID:33440 , Status:Wrong Answer , Submit:2010-08-02 17:55:58
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.2  完成版  (通過題目測資)
//Version: 2.0
#include <iostream>
using namespace std;

int main()
{
	char card[300];
	int n,m,i,j,k;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		int dogs=0,bdog=0,sdog=0,max=-32768,min=32767;
		for(j=0;j<m;j++)
		{
			cin>>card;		
			for(k=0;k<strlen(card);k++)
			{	
				if(card[k]=='d')         
				{
					sdog++;
					dogs++;
				}
				else if(card[k]=='D')
				{
					bdog++;
					dogs++;		
				}
				else if(card[k]<'A')
				{
					if(atoi(card)>max)
						max=atoi(card);
					if(atoi(card)<min)
						min=atoi(card);
				}	 
			}	
		}
		
		if(dogs!=0)
		{
			if(sdog>0 && bdog==0)
				cout<<min<<endl;
			if(sdog==0 && bdog>0)
				cout<<max<<endl;	
			if(sdog>0 && bdog>0)	//have big dog and small dog
				cout<<"SAFE\n";
		}
		else if(max==-32768 && min==32767)	//cat=0
			cout<<"SAFE\n";	
		else		//dog=0
			cout<<"SAFE\n";		
	}	
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//SID:33434 , Status:Wrong Answer , Submit:2010-08-02 13:12:48
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.2  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
using namespace std;

int main()
{
	char card[300];
	int n,m,i,j,k;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		int dogs=0,bdog=0,sdog=0,max=-32768,min=32767;
		for(j=0;j<m;j++)
		{
			cin>>card;		
			for(k=0;k<strlen(card);k++)
			{	
				if(card[k]=='d')         
				{
					sdog++;
					dogs++;
				}
				else if(card[k]=='D')
				{
					bdog++;
					dogs++;		
				}
				else if(card[k]<'A')
				{
					if(atoi(card)>max)
						max=atoi(card);
					if(atoi(card)<min)
						min=atoi(card);
				}	 
			}	
		}
		
		if(dogs!=0)
		{
			if(sdog>0 && bdog==0)
				cout<<min<<endl;
			if(sdog==0 && bdog>0)
				cout<<max<<endl;	
			if(sdog>0 && bdog>0)
				cout<<"SAFE\n";
		}	
		else
			cout<<"SAFE\n";		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//未完成...
#include <iostream>
using namespace std;

int main()
{
	char card[200];
	int n,m,i,j,k,test=0;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		for(j=0;j<m;j++)
		{
			cin>>card;
			cout<<card<<" ";
			
			for(k=0;k<strlen(card);k++)
			{
				//unsigned char ncard=card[i];
				//printf(" %2d",ncard);
				if(card[k]=='d')
				{
					cout<<"小狗";
					test++;
					break;
				}
				else if(card[k]=='D')
				{
					cout<<"大狗";
					test++;
					break;		
				}
				cout<<"test="<<test;
			}
		}
		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
#include <iostream>
using namespace std;

int main()
{
	char card[200];
	int n,m,i,j,k,test=0;
	cin>>n;
	for(i=0;i<n;i++)
	{
		cin>>m;
		for(j=0;j<m;j++)
		{
			cin>>card;
			
			for(k=0;k<strlen(card);k++)
			{
				//unsigned char ncard=card[i];
				//printf(" %2d",ncard);
				if(card[k]=='d' && test==0)         
				{
					cout<<"小狗\n";
					test++;
					break;
				}
				else if(card[k]=='D' && test==0)
				{
					cout<<"大狗\n";
					test++;
					break;		
				}
				else if(test==2 || test==0)
				{
					cout<<"SAFE\n";
					break;
				}
				 
			}
		}
		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0911:NTUJ homework assignment

http://acm.csie.org/ntujudge/problem.php?id=911

#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,k;
	for(;;)
	{
		int n,mintime=0;
		cin>>n;
		if(n>0)
		{
			vector<int>APARK(n);
			vector<int>CPARK(n);
			for(i=0;i<n;i++)
				cin>>APARK[i]>>CPARK[i];
			for(i=0;i<n;i++)
			{
				cout<<"A"<<i<<"="<<APARK[i]<<endl;
				cout<<"C"<<i<<"="<<CPARK[i]<<endl;
			}
		}
		else
			break;	
	}
	system("pause");
	return 0;   
}

0925:XOR Sum

http://acm.csie.org/ntujudge/problem.php?id=925

剛剛看一下所有寫過這題的結果
目前通過率為29%,而且還有好多種錯誤訊息
Compile Error , Wrong Answer , Runtime Error
Time Limit Exceeded , Output Limit Exceeded
//SID:34231 , Status:Wrong Answer , Submit:2010-08-12 20:58:43
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.8.12  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int i,j,k,n,max=-999999;
	cin>>n;
	for(i=0;i<n;i++)
	{
		int m;
		cin>>m;
		vector<int>array(m);
		vector<int>XOR(m);
		XOR[0]=0;
		for(j=0;j<m;j++)
		{
			cin>>array[j];
			if(array[j]>max)
				max=array[j];
		}
		for(k=1;k<m;k++)
		{
			XOR[k]=(XOR[k-1]^array[k-1]);
			if(XOR[k]>max)
				max=XOR[k];
		}
	//	for(j=0;j<m;j++)
	//		cout<<j<<"="<<array[j]<<endl;
	//	for(k=0;k<m;k++)
	//		cout<<"XOR"<<k<<"="<<XOR[k]<<endl;
	//	cout<<"max="<<max<<endl;
		cout<<max<<endl;			
	}
	/*
	cin>>a>>b>>c;
	cout<<(a^b);
	cout<<(a^b^c);
	*/
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0941:Calculate the Fence Needed

http://acm.csie.org/ntujudge/problem.php?id=941

//SID:34533 , Status:Time Limit Exceeded , Submit:2010-08-14 21:35:14
//線上系統驗證失敗=>Time Limit Exceeded...要再修正...
//2010.8.14  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	while(1)
	{
		int i,j,n,fence=0;
		cin>>n;
		fence=4*n;
		vector<int>x(n);
		vector<int>y(n);
		if(n>0)
		{
			for(i=0;i<n;i++)
				cin>>x[i]>>y[i];	
			//cout<<"1st  n="<<n<<"  fence="<<fence<<endl;
			//for(i=0;i<n;i++)
				//cout<<i<<". x="<<x[i]<<"  y="<<y[i]<<endl;	
			//sort1
			for(i=0;i<n;i++)
				for(j=i;j<n;j++)
					if(y[j]>y[j+1])
					{
						swap(x[j],x[j+1]);
						swap(y[j],y[j+1]);
					}
			for(i=0;i<n;i++)
				for(j=i;j<n;j++)		
					if(x[j]>x[j+1])
					{
						swap(x[j],x[j+1]);
						swap(y[j],y[j+1]);
					}								
			//for(i=0;i<n;i++)
				//cout<<i<<". x="<<x[i]<<"  y="<<y[i]<<endl;				
			for(i=0;i<n;i++)
				if((x[i]==x[i+1] && (y[i]==y[i+1]+1 || y[i]==y[i+1]-1)))	
					fence-=2;		
			//sort2
			for(i=0;i<n;i++)			
				for(j=i;j<n;j++)
					if(x[j]>x[j+1])
					{
						swap(x[j],x[j+1]);
						swap(y[j],y[j+1]);
					}				
			for(i=0;i<n;i++)
				for(j=i;j<n;j++)				
					if(y[j]>y[j+1])
					{
						swap(x[j],x[j+1]);
						swap(y[j],y[j+1]);
					}								
			//for(i=0;i<n;i++)
				//cout<<i<<". x="<<x[i]<<"  y="<<y[i]<<endl;				
			for(i=0;i<n;i++)			
				if((y[i]==y[i+1] && (x[i]==x[i+1]+1 || x[i]==x[i+1]-1)))	
					fence-=2;				
			//cout<<"2nd  n="<<n<<"  fence="<<fence<<endl;
			cout<<fence<<endl;
		}
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0960:How Many Ones Needed?

http://acm.csie.org/ntujudge/problem.php?id=960

#include <iostream>
using namespace std;
int main()
{
	int i,a,b,n,ans=0;
	while(1)
	{
		cin>>a>>b;
		if(a==0 && b==0)
			break;
		/*	
		while(1)
		{
			if(a==1)
			{
				ans++;
				break;
			}
			ans+=a%2;
			a/=2;
			
		}
		*/
		for(i=0;i<a;i++)
		{
			n=i;
			while(n!=0)
			{
				ans+=n&0x01;
				n>>=1;	
			}	
		}
		
		cout<<ans<<endl;
		ans=0;	
	}	
	system("pause");
	return 0;	
}

0970:Soda Surpler

http://acm.csie.org/ntujudge/problem.php?id=970

Version: 1.0
在測資為5 9 5時有例外的錯誤,因為if(e>c)e+=f;
所以沒有辦法上街撿空瓶,導致只能換身上剛好有的空瓶
會只判定為一天的時間

Version: 2.0
對上街撿空瓶的機會做修正,以if(e>=c)e+=f;
在測資為5 9 5時,輸出三天的時間
題意理解錯誤...

Version: 3.0
拿掉e+=f;的條件,不論e為何值,都能先做e+=f
所以此題做e跟f的區分,似乎就沒意義
並更新soda記次方式,能提升執行速度
//SID:36833 , Status:Accepted , Submit:2010-09-04 22:54:43
//2010.9.4  完成版  (通過題目測資&線上系統)
//Version: 3.0
#include <stdio.h>
int main()
{
	int e,f,c;
	while(scanf("%d %d %d",&e,&f,&c)==3)
	{
		int soda=0,back=0;
		e+=f;
		while(e>=c)
		{
			back=e/c;
			soda+=back;
			e%=c;
			e+=back;
		}
		printf("%d\n",soda);
	}
	return 0;	
}
//SID:36625 , Status:Wrong Answer , Submit:2010-09-04 12:19:32
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.4  完成版  (通過題目測資)
//Version: 2.0
#include <stdio.h>
int main()
{
	int e,f,c;
	while(scanf("%d %d %d",&e,&f,&c)==3)
	{
		int day=0;
		if(e>=c)
			e+=f;
		while(e>=c)
		{
			day++;
			e=e-c+1;	
		}
		printf("%d\n",day);
	}
	return 0;	
}
//SID:36624 , Status:Wrong Answer , Submit:2010-09-04 12:03:46
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.4  完成版  (通過題目測資)
//Version: 1.0
#include <stdio.h>
//#include <stdlib.h> 
int main()
{
	int e,f,c;
	while(scanf("%d %d %d",&e,&f,&c)==3)
	{
		int day=0;
		//printf("e=%d,f=%d,c=%d,day=%d\n",e,f,c,day);
		if(e>c)
			e+=f;
		while(e>=c)
		{
			day++;
			e=e-c+1;
			//printf("e=%d,f=%d,c=%d,day=%d\n",e,f,c,day);	
		}
		//printf("e=%d,f=%d,c=%d,day=%d\n",e,f,c,day);
		printf("%d\n",day);
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0971:Money Matters

http://acm.csie.org/ntujudge/problem.php?id=971

Version: 1.0
for(i=0;i<n;i++)
	if(o[i]<0)
		test=0;
將所有的個人欠款做測試,有小於0的表示為IMPOSSIBLE

Version: 2.0
for(i=0;i<m;i++)
	if(o[x[i]]<0 || o[y[i]]<0)
		test=0;
只對"還是朋友的關係"做欠款測試,有小於0的表示為IMPOSSIBLE

發現錯誤:
應該是能形成朋友圈的小團體中,是否能將所有欠款還清
有點無向圖形的感覺(可與0703:Think I'll Buy Me a Football Team有向圖形比較)
老師提供的解題方向為:
1.BFS or DFS (BFS in moodle,2010程式集訓)
2.#include <stack> or #include <queue> (或以STL實作)
3.Connected Component (OpenCV中也有,類似漫水填充(中文P.147))

老師提供的解法如下:
1.讀資料,資產負債表存起來待用, 朋友關係在存的時候,a[] 存大的, b[] 存小的
2.寫個 sort, 對 vector<int> array(n ) 去做 sort, 裡面是 位置, 
  所以 a[array[0]] 及 b[array[0]] 會是最小的那組 (以前教過的繩控排序)
3.依 array 的順序,由小到大將相關的連在一起 (head[3]=0 表示 3 的好朋友的頭是 0
  然後每個相同的頭就去數總合即可。
//SID:36969 , Status:Wrong Answer , Submit:2010-09-07 14:43:31
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.7  完成版  (通過題目測資)
//Version: 2.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,m,i;
	while(scanf("%d %d",&n,&m)==2)
	{
		int test=1;
		vector<int>o(n);
		vector<int>x(m);
		vector<int>y(m);
		for(i=0;i<n;i++)
			scanf("%d",&o[i]);
		for(i=0;i<m;i++)
			scanf("%d %d",&x[i],&y[i]);
		/*
		for(i=0;i<n;i++)
			printf("o[%d]=%d\n",i,o[i]);
		for(i=0;i<m;i++)
			printf("x[%d]=%d y[%d]=%d\n",i,x[i],i,y[i]);
		*/
		for(i=0;i<m;i++)
		{
			o[y[i]]+=o[x[i]];
			o[x[i]]=o[y[i]];
		}
		//for(i=0;i<n;i++)
			//printf("o[%d]=%d\n",i,o[i]);
		for(i=0;i<m;i++)
			if(o[x[i]]<0 || o[y[i]]<0)
				test=0;
		if(test==0)
			printf("IMPOSSIBLE\n");
		else
			printf("POSSIBLE\n");
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
//SID:36926 , Status:Wrong Answer , Submit:2010-09-06 11:21:11
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.6  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,m,i;
	while(scanf("%d %d",&n,&m)==2)
	{
		int test=1;
		vector<int>o(n);
		vector<int>x(m);
		vector<int>y(m);
		for(i=0;i<n;i++)
			scanf("%d",&o[i]);
		for(i=0;i<m;i++)
			scanf("%d %d",&x[i],&y[i]);
		/*
		for(i=0;i<n;i++)
			printf("o[%d]=%d\n",i,o[i]);
		for(i=0;i<m;i++)
			printf("x[%d]=%d y[%d]=%d\n",i,x[i],i,y[i]);
		*/
		for(i=0;i<m;i++)
		{
			o[y[i]]+=o[x[i]];
			o[x[i]]=o[y[i]];
		}
		//for(i=0;i<n;i++)
			//printf("o[%d]=%d\n",i,o[i]);
		for(i=0;i<n;i++)
			if(o[i]<0)
				test=0;
		if(test==0)
			printf("IMPOSSIBLE\n");
		else
			printf("POSSIBLE\n");
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0973:Rain Fall

http://acm.csie.org/ntujudge/problem.php?id=973

//SID:38802 , Status:Accepted , Submit:2010-10-02 21:20:02
//2010.10.2  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double L,K,T1,T2,H,x,F1,F2;
	while(scanf("%lf %lf %lf %lf %lf",&L,&K,&T1,&T2,&H)==5)
	{
		x=(-(-T1*K-H-T2*K)+sqrt((-T1*K-H-T2*K)*(-T1*K-H-T2*K)-4*T1*L*K))/(2*T1);
		F2=x*T1;
		if(H<L)
		{
			F1=H;
			F2=H;
		}
		else
		{
			if(H==L)
				F1=L;
			else
				F1=F2;
		}
		printf("%lf %lf\n",F1,F2);
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//未完成...
//找不到消失的0.009403
#include <stdio.h>
#include <stdlib.h>
int main()
{
	double L,K,T1,T2,H,F1,F2;
	while(scanf("%lf %lf %lf %lf %lf",&L,&K,&T1,&T2,&H)==5)
	{
		F1=H;
		if(H<L)
			F2=H;
		else
			F2=H+T2*K;
		printf("F1=%lf F2=%lf\n",F1,F2);
		
	}
	system("pause");
	return 0;	
}

孝皇:可能在F2的資料計算上出現錯誤,因為如果照正常上面所列的公式來計算的話的確為80.750000並不會為80.759403,還有去掉可省略部分後可能的原因應該為公式的問題。

0981:Tiles of Tetris, NOT!

http://acm.csie.org/ntujudge/problem.php?id=981

Version: 1.0
沒注意到邊界問題,導致在測資為1000000 999999會超出int範圍
使Output會有負數的值,這部分我還是常常會錯,需要再改進

Version: 2.0
要使資料能顯示超過21億就必須要換別的型態
但是使用double的話,會將大數顯示為科學記號的表示
將型態換成long long就是一種方法,能直接顯示一個大數
不過沒將各筆測資做更新,導致會在相同測資下越乘越大

Version: 3.0
在每次的處理中都更新一次執行結果才是正確的做法
將long long ans=1; 宣告在cin>>w>>h; 之後就是一種方式
或是直接以ans=(w/gcd(w,h));  ans=ans*(h/gcd(w,h));來做更新
//SID:36536 , Status:Accepted , Submit:2010-09-02 21:02:33
//2010.9.2  完成版  (通過題目測資&線上系統)
//Version: 3.0
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
	int c;
	while(b!=0)
	{
		c=a%b;
		a=b;
		b=c;
	}
	return a;
}
int main()
{
	int w,h;
	for(;;)
	{
		cin>>w>>h;
		//cout<<"w="<<w<<"  h="<<h<<endl;
		if(w>0 && h>0)
		{
			long long ans=1;
			if(h<w)
				swap(w,h);
			//cout<<"w="<<w<<"  h="<<h<<endl;
			//cout<<"gcd="<<gcd(w,h)<<endl;
			ans=(w/gcd(w,h));
			ans=ans*(h/gcd(w,h));
			//cout<<"ans="<<ans<<endl;
			cout<<ans<<endl;			
		}
		else
			break;		
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
//SID:36535 , Status:Wrong Answer , Submit:2010-09-02 20:56:04
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.2  完成版  (通過題目測資)
//Version: 2.0
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
	int c;
	while(b!=0)
	{
		c=a%b;
		a=b;
		b=c;
	}
	return a;
}
int main()
{
	int w,h;
	long long ans=1;
	for(;;)
	{
		cin>>w>>h;
		//cout<<"w="<<w<<"  h="<<h<<endl;
		if(w>0 && h>0)
		{
			if(h<w)
				swap(w,h);
			//cout<<"w="<<w<<"  h="<<h<<endl;
			//cout<<"gcd="<<gcd(w,h)<<endl;
			ans*=w/gcd(w,h);
			ans*=h/gcd(w,h);
			//cout<<"ans="<<ans<<endl;
			cout<<ans<<endl;			
		}
		else
			break;		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}
//SID:36533 , Status:Wrong Answer , Submit:2010-09-02 20:28:41
//線上系統驗證失敗=>Wrong Answer...要再修正...
//2010.9.2  完成版  (通過題目測資)
//Version: 1.0
#include <iostream>
using namespace std;
int gcd(int a,int b)
{
	int c;
	while(b!=0)
	{
		c=a%b;
		a=b;
		b=c;
	}
	return a;
}
int main()
{
	int w,h,ans=0;
	for(;;)
	{
		cin>>w>>h;
		//cout<<"w="<<w<<"  h="<<h<<endl;
		if(w>0 && h>0)
		{
			if(h<w)
				swap(w,h);
			//cout<<"w="<<w<<"  h="<<h<<endl;
			//cout<<"gcd="<<gcd(w,h)<<endl;
			ans=(w/gcd(w,h))*(h/gcd(w,h));
			//cout<<"ans="<<ans<<endl;
			cout<<ans<<endl;			
		}
		else
			break;		
	}
	//system("pause");	//上傳前須註解此行
	return 0;	
}

0982:Not So Flat After All

http://acm.csie.org/ntujudge/problem.php?id=982

//SID:36574 , Status:Accepted , Submit:2010-09-03 11:35:42
//2010.9.3  完成版  (通過題目測資&線上系統)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int a,b,i,count=0;
	while(1)
	{
		cin>>a>>b;
		count++;
		int radix=0,distance=0;
		vector<int>index1(1000005);
		vector<int>index2(1000005);
		
		if(a==0 && b==0)
			break;
			
		//int first=1;	
		for(i=2;i<=a;i++)
			while(a%i==0)
			{				
				a/=i;
				/*
				if(first)
					first=0;
				else
					cout<<"*";	
				cout<<i;
				*/
				index1[i]++;
			}
		//cout<<endl;
		
		//int first2=1;	
		for(i=2;i<=b;i++)
			while(b%i==0)
			{				
				b/=i;
				/*
				if(first2)
					first2=0;
				else
					cout<<"*";	
				cout<<i;
				*/
				index2[i]++;
			}
		//cout<<endl;
		/*
		for(i=0;i<10;i++)
			cout<<"index1 "<<i<<" = "<<index1[i]<<"  ";
		cout<<endl;
		for(i=0;i<10;i++)
			cout<<"index2 "<<i<<" = "<<index2[i]<<"  ";
		*/
		for(i=0;i<index1.size();i++)
		{
			if(index1[i]>0 || index2[i]>0)
				radix++;
			if(index1[i]>index2[i])
				distance+=index1[i]-index2[i];
			if(index2[i]>index1[i])
				distance+=index2[i]-index1[i];
		}			
		//cout<<"radix = "<<radix<<endl;	
		//cout<<"distance = "<<distance<<endl;
		cout<<count<<". "<<radix<<":"<<distance<<endl;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}
//未完成...
//程式碼過於雜亂...
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	int a,b,i,j;
	vector<int>radix1(1000);
	vector<int>radix2(1000);
	vector<int>radix3(1000);
	while(1)
	{
		cin>>a>>b;
		if(a==0 && b==0)
			break;
			
		int first=1,r1=0;	
		for(i=2;i<=a;i++)
			while(a%i==0)
			{
				
				a/=i;
				if(first)
					first=0;
				else
					cout<<"*";	
				cout<<i;
				radix1[r1]=i;
				r1++;
				
			}
		cout<<endl;
		
		int first2=1,r2=0;	
		for(i=2;i<=b;i++)
			while(b%i==0)
			{
				
				b/=i;
				if(first2)
					first2=0;
				else
					cout<<"*";	
				cout<<i;
				radix2[r2]=i;
				r2++;
				
			}
		cout<<endl;
		
		for(i=0;i<1000;i++)
		{
			if(radix1[i]==0)
				break;
			else
				cout<<"radix1 "<<i<<" = "<<radix1[i]<<"  ";
		}
		for(i=0;i<1000;i++)
		{
			if(radix2[i]==0)
				break;
			else
				cout<<"radix2 "<<i<<" = "<<radix2[i]<<"  ";
		}
	}	
	system("pause");
	return 0;	
}

0983:Probability One

http://acm.csie.org/ntujudge/problem.php?id=983

//SID:36530 , Status:Accepted , Submit:2010-09-02 18:02:40
//2010.9.2  完成版  (通過題目測資&線上系統)
#include <iostream>
using namespace std;
int main()
{
	int n,n1,n2,n3,n4,count=0;
	while(1)
	{
		cin>>n;
		if(n>0)
		{
			count++;
			cout<<count<<". ";
			//cout<<"n="<<n<<endl;
			n1=n*3;			
			if(n1%2==0)
			{
				cout<<"even ";
				n2=n1/2;
			}
			else
			{
				cout<<"odd ";
				n2=(n1+1)/2;
			}
			n3=n2*3;
			n4=n3/9;
			//cout<<"n1="<<n1<<endl;
			//cout<<"n2="<<n2<<endl;
			//cout<<"n3="<<n3<<endl;
			//cout<<"n4="<<n4<<endl;
			cout<<n4<<endl;
		}
		else
			break;
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

0997:Headshot

http://acm.csie.org/ntujudge/problem.php?id=997

#include <iostream>
using namespace std;
char array[150];
int main()
{
	int i;
	while(scanf("%s",array)==1)
	{
		cout<<array<<endl;
		int test0=1,test1=1,win=0,lose=0;
		
		cout<<"str="<<strlen(array)<<endl;
		for(i=0;i<strlen(array);i++)
		{
			if(array[i]=='0')
				test0++;
			if(array[i]=='1')
				test1++;
		}
		for(i=0;i<strlen(array);i++)
		{
			if((array[i]=='0' || array[i]=='1') && array[i+1]=='0')
				win++;
			if((array[i]=='0' || array[i]=='1') && array[i+1]=='1')
				lose++;
		}
		if(test0>1)
			test0--;
		if(test1>1)
			test1--;
		
		cout<<"test0="<<test0<<endl;
		cout<<"test1="<<test1<<endl;
		double x=test0/(double)strlen(array);
		cout<<x<<endl;
		double z=win/(double)strlen(array);
		cout<<z;
		
		if(z>0.5)
			cout<<"SHOOT"<<endl;
		else if(z<0.5)
			cout<<"ROTATE"<<endl;
		else
			cout<<"EQUAL"<<endl;
				
		
	}
	system("pause");
	return 0;   
}

1013:In-circles Again

http://acm.csie.org/ntujudge/problem.php?id=1013

給定r1,r2,r3 求三角形ABC面積
畫了很多線,還是看不出來要怎麼求...
由李權明老師證明出 r=r1+r2+r3
由相似三角形與畢氏定理求得計算公式
但是程式計算結果有很大的誤差,
印出讀到的測資發現資料只印出6位,
不確定是沒印到,還是其他部分沒讀到所以有計算誤差...
新增Excel套用公式計算此題,答案還是不同,有可能是公式推導錯誤...

1013-test.xls

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double r1,r2,r3,r,a1,a2,b1,b2,c1,c2,A,B,C,S,ans,count=0;
	while(scanf("%lf %lf %lf",&r1,&r2,&r3)==3)
	{
		if(r1<0 || r2<0 || r3<0)
			break;
		count++;
		r=r1+r2+r3;	
		a2=sqrt( ((2*(r1+r)*(r1*r1+r*r1)/(r-r1))-r*r+r1*r1+(r1+r)*(r1+r))  /  ((r*r-r1*r1)/((r-r1)*(r-r1)))  );
		a1=a2*(r1/(r-r1));	
		b2=sqrt( ((2*(r2+r)*(r2*r2+r*r2)/(r-r2))-r*r+r2*r2+(r2+r)*(r2+r))  /  ((r*r-r2*r2)/((r-r2)*(r-r2)))  );
		b1=b2*(r2/(r-r2));
		c2=sqrt( ((2*(r3+r)*(r3*r3+r*r3)/(r-r3))-r*r+r3*r3+(r3+r)*(r3+r))  /  ((r*r-r3*r3)/((r-r3)*(r-r3)))  );
		c1=c2*(r3/(r-r3));
		A=b1+b2+c1+c2;
		B=a1+a2+c1+c2;
		C=a1+a2+b1+b2;
		S=(A+B+C)/2;
		ans=sqrt(S*(S-A)*(S-B)*(S-C));
		cout<<"r1="<<r1<<endl;
		cout<<"r2="<<r2<<endl;
		cout<<"r3="<<r3<<endl;
		cout<<"ans="<<ans<<endl;
		cout<<"Case "<<count<<": "<<ans<<endl;
	}
	system("pause");
	return 0;	
}
//迷之程式...
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
	double r1,r2,r3,pi=3.141592653589793,a,b,c,s;
	for(;;)
	{
		cin>>r1>>r2>>r3;
		if(r1<0 || r2<0 || r3<0)
			break;
		a=r1*2*pi;
		b=r2*2*pi;
		c=r3*2*pi;
		s=(a+b+c)/2;
		cout<<sqrt(s*(s-a)*(s-b)*(s-c))<<endl;	
	}
	system("pause");
	return 0;
}

1014:Rating Hazard

http://acm.csie.org/ntujudge/problem.php?id=1014

每筆測資為最後的平均分數
分數為所有人給分後的平均數
每人可給1~5分,人數不定
需求出能算出"最後平均分數"的"最少人數"
且因為要求是最少人數,所以可知最多人給的分數,不一定會是最高分的
EX1:3.16分 => (給3分的人數)>(給4分的人數)
EX2:3.67分 => (給4分的人數)>(給3分的人數)
由以上兩例可知,給最高分的人數應落在離平均分數最接近的區間
但是若為3.5分,則可能會有(給4分的人多)或(給3分的人多),但是總人數相同的可能性
//未完成...
#include <iostream>
using namespace std;
int main()
{
	int i,j;
	double star=0;
	while(1)
	{
		cin>>star;
		if(star<0)
			break;
		int people=0;
		for(i=5;i>0;i--)
		{
			if(i>star+1)
				break;
			cout<<i<<endl;
		}	
	}
	system("pause");
	return 0;	
}

1015:Relational Operators

http://acm.csie.org/ntujudge/problem.php?id=1015

Version: 1.0
因為只宣告char op[2];,而字串結尾的'\0'也要佔一字元
所以在讀完兩字元後,op空間不足,造成Runtime Error

Version: 2.0
修正char op[2];大小,多給他到char op[10];
即可通過此題
//SID:36695 , Status:Accepted , Submit:2010-09-04 15:28:13
//2010.9.4  完成版  (通過題目測資&線上系統)
//Version: 2.0
#include <iostream>
using namespace std;
int main()
{
	char op[10];
	int a=0,b=0,count=0;
	//cout<<a<<" "<<op[0]<<op[1]<<" "<<b<<endl;
	while(scanf("%d %s %d",&a,&op,&b)==3)
	{
		if(op[0]=='E')
			break;
		
		count++;
		//cout<<a<<" "<<op[0]<<op[1]<<" "<<b<<endl;
		cout<<"Case "<<count<<": ";
		
		if(op[0]=='>' && op[1]!='=')
		{
			if(a>b)
				cout<<"true";
			else
				cout<<"false";	
		}
		if(op[0]=='>' && op[1]=='=')
		{
			if(a>b || a==b)
				cout<<"true";
			else
				cout<<"false";	
		}	
		if(op[0]=='<' && op[1]!='=')
		{
			if(a<b)
				cout<<"true";
			else
				cout<<"false";	
		}
		if(op[0]=='<' && op[1]=='=')
		{
			if(a<b || a==b)
				cout<<"true";
			else
				cout<<"false";	
		}
		if(op[0]=='=' && op[1]=='=')
		{
			if(a==b)
				cout<<"true";
			else
				cout<<"false";	
		}
		if(op[0]=='!' && op[1]=='=')
		{
			if(a!=b)
				cout<<"true";
			else
				cout<<"false";	
		}
		cout<<endl;		
	}
	//system("pause");	//上傳前須註解此行
	return 0;			
}

1020:Nowhere Money

http://acm.csie.org/ntujudge/problem.php?id=1020

//未完成...
#include <iostream>
#include <vector>
using namespace std;
int f(int a)
{
	int f[10000],i;
	f[0]=0;
	f[1]=1;
	for(i=2;i<=a;i++)
		f[i]=f[i-1]+f[i-2];
	return f[a];	
}
int main()
{
	int test=0,i;
	while(scanf("%d",&test)==1)
	{ 
		vector<int>T(test);
		int test2=test;
		T[0]=1;
		//cout<<"test="<<test<<endl;		
		for(i=1;i<test+2;i++)
		{	
			//cout<<i<<".="<<f(i)<<"  ";
			T[i]=f(i+1);
		}
		/*
		cout<<endl;
		for(i=0;i<test;i++)	
			cout<<i<<".t="<<T[i]<<"  ";
		cout<<endl;
		*/
		for(i=test;i>1;i--)
		{
			if(test>=T[i-1])
			{
				test-=T[i-1];
				//cout<<"T="<<i-1<<" "<<"test="<<test<<endl;
				cout<<i-1<<" ";	
			}	
		}
		cout<<endl;	
		for(i=test2;i>1;i--)
		{
			if(test2>=T[i-1])
			{
				test2-=T[i-1];
				//cout<<"T="<<i-1<<" "<<"test="<<test<<endl;
				cout<<T[i-1]<<" ";	
			}	
		}
		cout<<endl;
			
	}
	system("pause");
	return 0;	
}

1045:Separate Points

http://acm.csie.org/ntujudge/problem.php?id=1045

//D: Convex Hull (computaional geometry)  O(n*logn)
//D: Convex Hull (nlon) + 測黑色是否在白色 convext hull 之中
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	int n,m,i;
	for(;;)
	{	
		cin>>n>>m;
		if(n==0 && m==0)
			break;
		vector<int>bx(n);
		vector<int>by(n);
		vector<int>wx(m);
		vector<int>wy(m);
		for(i=0;i<n;i++)
			cin>>bx[i]>>by[i];
		for(i=0;i<m;i++)
			cin>>wx[i]>>wy[i];
		
		/*	
		for(i=0;i<n;i++)
			cout<<bx[i]<<"  "<<by[i];
		for(i=0;i<m;i++)
			cout<<wx[i]<<"  "<<wy[i];
		*/
			
	}
	system("pause");
	return 0;	
}

1047:Chemist's Math

http://acm.csie.org/ntujudge/problem.php?id=1047

//is a "string" + "gaussian elimination"
#include <iostream>
using namespace std;
char a[1000];
char a2[1000][10];

int main()
{
	int i,j,k,x[100];
	char test;
	while(scanf("%s", a)==1)
	{
		if(a[0]=='.')
			break;
		j=0;
		k=0;
		for(i=0;i<100;i++)
			x[i]=1;
		//printf("%s",a);
		for(i=0;i<strlen(a);i++)
		{
			if((a[i]>='0' && a[i]<='9') && (a[i+1]<'0' && a[i+1]>'9'))
			{
				//test=a[i];
//				x[j]=atoi(a[i]);
				printf("x=%d\n",&x[j]);
				j++;
			}
			if((a[i]>='0' && a[i]<='9') && (a[i+1]>='0' && a[i+1]<='9') && (a[i+2]<'0' && a[i+2]>'9'))
			{
				//test=a[i];
//				x[j]=atoi(a[i])*10+atoi(a[i+1]);
				printf("x=%d\n",&x[j]);
				j++;
			}
			if((a[i]>='0' && a[i]<='9') && (a[i+1]>='0' && a[i+1]<='9' && (a[i+2]>='0' && a[i+2]<='9') && (a[i+3]<'0' && a[i+3]>'9'))
			{
				//test=a[i];
//				x[j]=atoi(a[i])*100+atoi(a[i+1]*10+atoi(a[i+2]);
				printf("x=%d\n",&x[j]);
				j++;
			}		
		}
		for(i=0;i<strlen(a);i++)
		{
			if((a[i]>='A' && a[i]<='Z') && (a[i+1]>='A' && a[i+1]<='Z'))
			{
				a2[k][0]=a[i];
				k++;
			}
			if((a[i]>='A' && a[i]<='Z') && (a[i+1]>='a' && a[i+1]<='z'))
			{
				a2[k][0]=a[i];
				a2[k][1]=a[i+1];
				k++
			}
		}
	}
	system("pause");
	return 0;	
}
李宗樺/我的台大培訓.txt · Last modified: 2013/03/11 18:44 by 118.160.238.61