PTA 团队天梯赛║L1-008 求整数段和

一、题目要求

给定两个整数AB,输出从AB的所有整数以及这些数的和。

输入格式:

输入在一行中给出 2 个整数AB,其中−100≤AB≤100,其间以空格分隔。

输出格式:

首先顺序输出从AB的所有整数,每 5 个数字占一行,每个数字占 5 个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例:

1
-3 8

输出样例:

1
2
3
4
   -3   -2   -1    0    1
2 3 4 5 6
7 8
Sum = 30

二、解题思路

用循环打出两个数之间的所有整数较为简单,需要注意的是要按照题目要求控制打印的格式,可以使用 C 语言风格的 printf() 式样化规定字符较为方便控制输出。

可以在“%”和字母之间插进数字表示最大场宽

例如:%3d 表示输出 3 位整型数,不够 3 位右对齐。

%9.2f 表示输出场宽为 9 的浮点数,其中小数位为 2,整数位为 6,

小数点占一位,不够 9 位右对齐。

之后五个数字一换行,利用对 5 取余的办法控制。

三、代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
int a, b, sum = 0;
cin >> a >> b;
int j = 0;
for(int i = a; i < b+1 ; i++)
{
printf("%5d",i); //每个数字占 5 个字符宽度,向右对齐
sum += i;
j++;
if(j%5 == 0) cout << endl;
}
if(j%5 != 0 ) {cout << endl;}
cout << "Sum = " << sum << endl;

return 0;
}

四、反思总结

第一次提交只得了9分,提示格式错误扣了一分,查错发现原代码在输出最后的Sum=前直接输出了换行,如果要输出 5 的整数倍的数字,代码就会多出一空行,后加入

1
if(j%5 != 0 ) {cout << endl;}

控制空行的输出,重新提交得到满分。