給定區間 [−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;
}