这是我参与8月更文挑战的第6天,活动详情查看:8月更文挑战
《算法笔记》2.10小节——C/C++快速入门->黑盒测试 问题 H: A+B 输入输出练习VIII
题目描述
你的任务是计算若干整数的和。
输入
输入的第一行为一个整数N,接下来N行每行先输入一个整数M,然后在同一行内输入M个整数。
输出
对于每组输入,输出M个数的和,每组输出之间输出一个空行。
样例输入
3
4 1 2 3 4
5 1 2 3 4 5
3 1 2 3
样例输出
10
15
6
示例代码
#include<iostream>
using namespace std;
int main(){
int N;
scanf("%d",&N);
for(int i=0;i<N;i++){
int M;
int a;
int sum=0;
scanf("%d",&M);
for(int i=0;i<M;i++){
scanf("%d",&a);
sum=sum+a;
}
printf("%d\n\n",sum);
}
return 0;
}
《算法笔记》3.1小节——入门模拟->简单模拟 问题 A: 剩下的树
题目描述
有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。 现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。 可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。
输入
两个整数L(1<=L<=10000)和M(1<=M<=100)。 接下来有M组整数,每组有一对数字。
输出
可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。
样例输入
4 2
1 2
0 2
11 2
1 5
4 7
0 0
样例输出
2
5
- 题目大意:每次输入一组L,M,接着再输入M组要删除的区间,则返回在0~L共L+1个数当中没有被删除的数的个数和
- 主要思路:借助初始为0的数组,M个区间,凡是出现一个区间,就令该区间内的所有数为1,则剩下的只要数组元素为0,则未被删除,计算其和即为所求。
- 注意每次输入LM,一些数据需要初始化
示例代码
#include<iostream>
using namespace std;
int main(){
int L,M;
int n[10000];
int a,b;
while(scanf("%d%d",&L,&M)!=EOF){
int count=0;
if(L==0&&M==0){
break;
}
for(int i=0;i<=L;i++){
n[i]=1;
}
if(L>=1&&L<=10000&&M>=1&&M<=100){
for(int i=0;i<M;i++){
scanf("%d%d",&a,&b);
for(a;a<=b;a++){
n[a]=0;
}
}
for(int i=0;i<=L;i++){
if(n[i]==1){
count++;
}
}
printf("%d\n",count);
}
}
return 0;
}