一、题目信息
给定区间[-231, 231]内的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开始)。
二、基本思路
想过两条思路:第一种是将需要比较的三个数字存储在三个long型变量中,每输入三个数字即刻反馈结果,单个for循环即可;第二种思路是先对所有需要考察的数值统一存入一个long型数组中,然后在进行for循环比大小,这时候需要两个for循环。
三、具体实现代码与遇到的问题
(一)从第二种思路说起
先放上代码:
#include<stdio.h>
int main()
{
long A[30];
int n,signal,i;/*n用来存样例个数,signal第一次用来吃回车,第二次用来顺序读输入(或者吃掉空格),i用来执行循环(一次或两次)*/
n = getchar() - 48; /*得到的是单个字符,%d时是ASCII码值*/
signal = getchar();
for(i=0;i<3*n;i+=3)
{
scanf("%ld %ld %ld", &A[i],&A[i+1],&A[i+2]);
/* signal = getchar();*/
printf("A[%d]=%ld,n=%d\n", i,A[i],n);
/* i++;*/
}
for(i = 3; i/3<=n;i+=3)
{
if(A[i-3] + A[i-2] > A[i-1])
printf("Case #%d: true\n", i/3);
else
printf("Case #%d: false\n", i/3);
}
}
查看提交
评测结果
时间 | 结果 | 得分 | 题目 | 语言 | 用时(ms) | 内存(kB) | 用户 |
---|---|---|---|---|---|---|---|
4月24日 15:34 | 答案正确 | 15 | 1011 | C (gcc 4.7.2) | 1 | 264 | chauncyyoung |
测试点
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 1 | 256 | 9/9 |
1 | 答案正确 | 1 | 264 | 3/3 |
2 | 答案正确 | 1 | 260 | 3/3 |
遇到的问题:
1、getchar()取值。getchar获取的是单个字符,所以除0-9的数字只能单个数字获取;且获取的数字是以字符存储,所以用于循环比大小或者数值运算时,
千万千万要记得这一点!!!
避免方法和代码中相同,即读取0-9的数字后-48,即为ASCII码对应的数值;
2、scanf()读取数值的问题。scanf是以空格、换行后停止读入,所以既可以每次读入一个,也可以一次读入多个,开心就好。也不需要用getchar吃掉空格和换行符,因为scanf已经选择性无视它们了;
(一)接下来是第一种思路
先放上代码:
#include<stdio.h>
int main()
{
long A,B,C;
int n,signal,i;
n = getchar() - 48; /*得到的是单个字符,%d时是ASCII码值*/
signal = getchar();
for(i=1;i<=n;i++)
{
scanf("%ld %ld %ld", &A,&B,&C);
if(A+B>C)
printf("Case #%d: true\n", i);
else
printf("Case #%d: false\n", i);
}
}
评测结果
时间 | 结果 | 得分 | 题目 | 语言 | 用时(ms) | 内存(kB) | 用户 |
---|---|---|---|---|---|---|---|
4月24日 15:36 | 答案正确 | 15 | 1011 | C (gcc 4.7.2) | 1 | 384 | chauncyyoung |
测试点
测试点 | 结果 | 用时(ms) | 内存(kB) | 得分/满分 |
---|---|---|---|---|
0 | 答案正确 | 1 | 264 | 9/9 |
1 | 答案正确 | 1 | 384 | 3/3 |
2 | 答案正确 | 1 | 384 | 3/3 |
运行时间几乎相同但是内存占用更大一丢丢,至于为什么...暂时不清楚,等日后了解了再更新吧~