杭电OJ第一部分练习题答案记录
1000
1.这里scanf_s是我用的编译器原因,提交答案可以改成scanf就可以了。
2.另外解释一下EOF的作用:EOF在库函数中其实被宏定义,相当于-1,因为题目举例的输入输出只是举例子,一个代码的要求不仅仅满足于一组数据,所以会有while (scanf_s("%d %d", &A, &B) != EOF) 这种的语法出现,目的就是为了输入多组数据。
3.退出含有EOF的while循环的操作:EOF=-1 按ctrl+c/d/z再按回车,即退出循环(简单的说就是键盘里有一组键盘相加为-1,每个电脑系统不一样)。
#include <stdio.h>
int main() {
int A, B;
while (scanf_s("%d %d", &A, &B) != EOF) {
printf("%d\n", A + B);
}
return 0;
}
1001
这里是正确答案,防止n*(n+1)超出int范围
#include<stdio.h>
int main()
{
int n, sum;
while (scanf("%d", &n) != EOF)
{
if (n % 2 == 0)
sum = n / 2 * (n + 1);
else
sum = (n + 1) / 2 * n;
printf("%d\n\n", sum);
}
return 0;
}
还有一种方法是,这种方法其实本身没有问题,就是这个题目要求防止溢出,所以提交的时候被编译错误了,数据随机的嘛。
#include <stdio.h>
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int sum = 0;
for (int i = 1; i <= n; i++)
{
sum += i;
}
printf("%d\n\n", sum);
}
return 0;