《算法笔记》2.10小节——C/C++快速入门->黑盒测试 问题 H: A+B 输入输出练习VIII 3.1小节——入门模拟->简单模拟 问题 A: 剩下的树

180 阅读1分钟

这是我参与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 
  1. 题目大意:每次输入一组L,M,接着再输入M组要删除的区间,则返回在0~L共L+1个数当中没有被删除的数的个数和
  2. 主要思路:借助初始为0的数组,M个区间,凡是出现一个区间,就令该区间内的所有数为1,则剩下的只要数组元素为0,则未被删除,计算其和即为所求。
  3. 注意每次输入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; 
}