【C語言版】1011 A+B 和 C (15分)

 

給定區間 [−2​^31​​,2^​31​​] 內的 3 個整數 A、B 和 C,請判斷 A+B 是否大於 C。

輸入格式:

輸入第 1 行給出正整數 T (≤10),是測試用例的個數。隨後給出 T 組測試用例,每組佔一行,順序給出 A、B 和 C。整數間以空格分隔。

輸出格式:

對每組測試用例,在一行中輸出 Case #X: true 如果 A+B>C,否則輸出 Case #X: false,其中 X 是測試用例的編號(從 1 開始)。

輸入樣例:

4
1 2 3
2 3 4
2147483647 0 2147483646
0 -2147483648 -2147483647

輸出樣例:

Case #1: false
Case #2: true
Case #3: true
Case #4: false

【思路】

①我是按照題目給的輸入格式做的,我看其他的博客主大部分是這樣的:每輸入一行就進行判斷然後輸出,奇怪的是通過了測試。

②由於 3 個整數已經給定區間 [−2​^31​​,2^​31​​] ,這點得小心,一般的int(2^31-1)是不能滿足的,long(2^31-1)也是不行的。只能選擇long long (2^63-1)  足夠了。但是測試時,發現用int 有一個測試點過不去,用long的話沒有問題。感覺此題不嚴謹。

③我是先把輸入進來的所有數據先保存到一個一維數組裏面,然後再根據輸出格式進行打印、數據處理。

 

另附上測試代碼:

#include <stdio.h>
int main()
 {
 	printf("short 佔%d個字節\n",sizeof(short));
	printf("int 佔%d個字節\n",sizeof(int));
	printf("long 佔%d個字節\n",sizeof(long));
	printf("long long 佔%d個字節\n\n\n",sizeof(long long));
	
		
	printf("unsigned short 佔%d個字節\n",sizeof(unsigned short));	
	printf("unsigned int 佔%d個字節\n",sizeof(unsigned int));
	printf("unsigned long 佔%d個字節\n",sizeof(unsigned long));
	printf("unsigned long long佔%d個字節\n",sizeof(unsigned long long));

    return 0;
}
 

 

【參考代碼】

#include <stdio.h>
int main()
 {
  	int n;/需要測試的行數 
	long array[30];//每行數據都保存在這數組裏,30=每行有3個整數*10行 
  	int i=0,j=0;//j是用來打印行號的  
  	char ch;//保存空格和換行用的
	   
  	scanf("%d",&n);
  	for(i=0;i<3*n;)
  		{	
  			do
  				{
  					scanf("%lld",&array[i++]);
  					ch=getchar();
				}
			while(ch!='\n');	
		}//數據輸入完畢 
	
	for(i=0;i<=(3*n-3);i+=3)//數據處理 
		{
			printf("Case #%d: ",(++j));//j是用來打印行號的 
			if((array[i]+array[i+1])>(array[i+2]))
				printf("true\n");	
			else 
				printf("false\n");			
		} 
    return 0;
}
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章