1. 程式人生 > 其它 >1011 A+B 和 C (15 分)

1011 A+B 和 C (15 分)

1011 A+B 和 C (15 分)

給定區間 [−2的31次方,2的31次方] 內的 3 個整數 ABC,請判斷 A+B 是否大於 C

輸入格式:

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

輸出格式:

對每組測試用例,在一行中輸出 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

我的程式碼

#include<stdio.h>
const int maxt = 10;
int main(){
	int a[maxt] = {}, b[maxt] = {}, c[maxt] = {}, t;
	scanf("%d", &t);
	for(int i = 0; i < t; i++){
		scanf("%d%d%d", &a[i], &b[i], &c[i]);
	} 
	for(int i = 0; i < t; i++){
		if(a[i] + b[i] > c[i]) printf("Case #%d: true\n", i+1);
		else printf("Case #%d: false\n", i+1);
	}
	return 0;
} 

又是部分錯誤!

改正程式碼

#include<stdio.h>
const int maxt = 10;
int main(){
	long long a[maxt] = {}, b[maxt] = {}, c[maxt] = {};//相比於原先的程式碼只是把abc的變數型別改變了,因為根據題目的範圍,a和b相加後是超過了int型別的範圍的,所以才會導致錯誤
	int t;
	scanf("%d", &t);
	for(int i = 0; i < t; i++){
		scanf("%lld%lld%lld", &a[i], &b[i], &c[i]);
	} 
	for(int i = 0; i < t; i++){
		if(a[i] + b[i] > c[i]) printf("Case #%d: true\n", i+1);
		else printf("Case #%d: false\n", i+1);
	}
	return 0;
} 

思路

  1. 輸入T,用以表示輸入的資料組數,同時令tcase表示當前是第幾組,初值為1.
  2. 對每組資料,判斷A+B是否大於C:
    1. 若大於,則輸出Case #%d: true,其中%d表示當前的tcase值
    2. 否則,輸出Case #%d: false。
  3. 注意點:如果要執行T次迴圈,除了使用for之外,更簡潔的寫法是while(T--),但是不要用while(--T).這種寫法是T-1次,而不是T次。
  4. int型別加起來之後會超過範圍,所以abc都要用long long型別,並且輸出輸入格式是%lld

參考程式碼

  1. 只使用了一個迴圈,把輸入和輸出放在了一個迴圈裡面。簡潔了程式碼,學習!!
  2. 不需要使用陣列,因為用了while函式沒有i這個引數了,可以在迴圈內就進行運算一組組來。
  3. tcase初值設定為1,從第一組開始,在迴圈中自增
#include<cstdio>
int main(){
	int T, tcase = 1;
    scanf("%d", &T);
    while(T--){
        long long a, b, c;
        scanf("%lld%lld%lld", &a, &b, &c);
        if(a + b > c){
            printf("%Case #%d: true\n", tcase++);
        }else{
            printf("Case #%d: false\n", tcase++);//先輸出在進行自增操作,所以在第一個迴圈是輸出的還是初值1
        }
    }
    return 0;
}