《算法笔记》2.10小节——C/C++快速入门->黑盒测试

问题 A: A+B 输入输出练习I

题目

题目描述

你的任务是计算 a+b。这是为了 acm 初学者专门设计的题目。你肯定发现还有其他题目跟这道题的标题类似,这些问题也都是专门为初学者提供的。

输入

输入包含一系列的 a 和 b 对,通过空格隔开。一对 a 和 b 占一行。

输出

对于输入的每对 a 和 b,你需要依次输出 a、b 的和。 如对于输入中的第二对 a 和 b,在输出中它们的和应该也在第二行。

样例输入

1
2
1 5
10 20

样例输出

1
2
6
30

题解

思路

由于题目中并没有指定输入的数量,那么需要用到一种特殊的结构。利用scanf()的返回值是否为EOF来判断输入是否结束。

1
2
3
4
while (scanf("%d %d", &a, &b) != EOF)
{
...
}

原因是scanf()只有在读取文件时到达文件末尾才会导致无法读取的现象,才会产生读入失败。这个时候scanf()函数会返回 -1 (scanf()函数的返回值是其成功读入时参数的个数)。C 语言中使用EOF代表 -1。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
{
printf("%d\n", a + b);
}

system("pause");
return 0;
}

问题 B: A+B 输入输出练习II

题目

题目描述

你的任务是计算 a+b。

输入

第一行是一个整数 N,表示后面会有 N 行 a 和 b,通过空格隔开。

输出

对于输入的每对 a 和 b,你需要在相应的行输出 a、b 的和。

如第二对 a 和 b,对应的和也输出在第二行。

样例输入

1
2
3
2
1 5
10 20

样例输出

1
2
6
30

题解

思路

该题是while( n-- )类型。还是比较简单的。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int n, a, b;
scanf("%d", &n);
while (n--)
{
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
}

system("pause");
return 0;
}

问题 C: A+B 输入输出练习III

题目

题目描述

你的任务是计算 a+b。

输入

输入中每行是一对 a 和 b。其中会有一对是 0 和 0 标志着输入结束,且这一对不要计算。

输出

对于输入的每对 a 和 b,你需要在相应的行输出 a、b 的和。

如第二对 a 和 b,他们的和也输出在第二行。

样例输入

1
2
3
1 5
10 20
0 0

样例输出

1
2
6
30

题解

思路

与 A 一样的,只是需要加入一个判断,就是a == 0 && b == 0这个时候是程序输入结束的标志。

代码

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>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
{
if (a == 0 && b == 0)
{
break;
}
printf("%d\n", a + b);
}

system("pause");
return 0;
}

问题 D: A+B 输入输出练习IV

题目

题目描述

你的任务是计算若干整数的和。

输入

每行的第一个数 N,表示本行后面有 N 个数。

如果 N=0 时,表示输入结束,且这一行不要计算。

输出

对于每一行数据需要在相应的行输出和。

样例输入

1
2
3
4 1 2 3 4
5 1 2 3 4 5
0

样例输出

1
2
10
15

题解

思路

这道题目其实是把上面两道题目合起来了。需要注意的地方如下:

  • 没有行数的约定,所以需要用EOF作为判断结束标志。
  • 读取了每一行的第一个数n后,需要判断其是否为 0,为 0 则break;否则继续执行。
  • while( n-- )直到 n == 0

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int n;

while (scanf("%d", &n) != EOF)
{
if (n == 0)
{
break;
}
int sum = 0, x;
while (n--)
{
scanf(" %d", &x);
sum += x;
}
printf("%d\n", sum);
}

system("pause");
return 0;
}

问题 E: A+B 输入输出练习V

题目

题目描述

你的任务是计算若干整数的和。

输入

输入的第一行是一个正数 N,表示后面有 N 行。每一行的第一个数是 M,表示本行后面还有 M 个数。

输出

对于每一行数据需要在相应的行输出和。

样例输入

1
2
3
2
4 1 2 3 4
5 1 2 3 4 5

样例输出

1
2
10
15

题解

思路

这题比较简单,看代码里的注释就好了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int n;
scanf("%d", &n);
// 根据 n 看行数
while (n--)
{
int m;
scanf("%d", &m);
int sum = 0, x;
// 根据 m 看一行的个数
while (m--)
{
scanf(" %d", &x);
sum += x;
}
printf("%d\n", sum);
}

system("pause");
return 0;
}

问题 F: A+B 输入输出练习VI

题目

题目描述

你的任务是计算若干整数的和。

输入

每行的第一个数 N,表示本行后面有 N 个数。

输出

对于每一行数据需要在相应的行输出和。

样例输入

1
2
4 1 2 3 4
5 1 2 3 4 5

样例输出

1
2
10
15

题解

思路

这题跟之前一题有点像,就不多说了。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int n;
// 读取n
while (scanf("%d", &n) != EOF)
{
int sum = 0, x;
// 读取每行
while (n--)
{
scanf(" %d", &x);
sum += x;
}
printf("%d\n", sum);
}

system("pause");
return 0;
}

问题 G: A+B 输入输出练习VII

题目

题目描述

你的任务是计算两个整数的和。

输入

输入包含若干行,每行输入两个整数 a 和 b,由空格分隔。

输出

对于每组输入,输出 a 和 b 的和,每行输出后接一个空行。

样例输入

1
2
1 5
10 20

样例输出

1
2
3
6

30

题解

思路

之前的代码输出的\n后再加一个\n即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int a, b;
while (scanf("%d %d", &a, &b) != EOF)
{
printf("%d\n\n", a + b);
}

system("pause");
return 0;
}

问题 H: A+B 输入输出练习VIII

题目

题目描述

你的任务是计算若干整数的和。

输入

输入的第一行为一个整数 N,接下来N行每行先输入一个整数 M,然后在同一行内输入 M 个整数。

输出

对于每组输入,输出 M 个数的和,每组输出之间输出一个空行。

样例输入

1
2
3
4
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3

样例输出

1
2
3
4
5
10

15

6

题解

思路

E 题的输出再加一个\n即可。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

int main()
{
int n;
scanf("%d", &n);
// 根据 n 看行数
while (n--)
{
int m;
scanf("%d", &m);
int sum = 0, x;
// 根据 m 看一行的个数
while (m--)
{
scanf(" %d", &x);
sum += x;
}
printf("%d\n\n", sum);
}

system("pause");
return 0;
}

《算法笔记》2.10小节——C/C++快速入门->黑盒测试
https://excelius.xyz/《算法笔记》2-10小节——c-c-快速入门-黑盒测试/
作者
Ther
发布于
2021年11月9日
许可协议