PAT乙级题目1011(python + java)
题目信息
给定区间 [−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 开始)。
python3
x = int(input())
# 输入内容
list1 = []
for i in range(x):
list2 = list(map(int, input().strip().split()[:3]))
list1.append(list2)
# 判断并输出
for i in range(len(list1)):
list3 = list1[i]
if list3[0] + list3[1] > list3[2]:
print("Case #" + str(i + 1) + ": true")
else:
print("Case #" + str(i + 1) + ": false")
java
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner ll = new Scanner(System.in);
int a = ll.nextInt();
//结果存储数组
String[] result = new String[a];
//输入加判断
for(int i = 0; i < a; i++)
{
//一定要用长整型(因为当值临界时再相加减会产生溢出)
long[] aa = new long[3];
//输入内容
for(int j = 0; j < 3; j++)
{
aa[j] = ll.nextInt();
}
//判断并保存结果
if(aa[0] + aa[1] > aa[2])
{
result[i] = "Case #" + String.valueOf(i + 1) + ": true";
}
else if(aa[0] + aa[1] <= aa[2])
{
result[i] = "Case #" + String.valueOf(i + 1) + ": false";
}
}
//输出结果
for(int i = 0; i < result.length; i++)
{
System.out.println(result[i]);
}
}
}
结语
万分注意c++或者java中的int和long等,一旦计算超界就会发生溢出,得不到想要的结果,可以看看如图的实验:
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
int a = 2147483647;
int b = 1;
int d = -1;
int c = -2147483648;
System.out.println(a + b);
System.out.println(d + c);
}
}
结果如下:
-2147483648
2147483647
而python3中int和long统一为int,仅受内存限制,理论上讲是无限长度的。