算法笔记习题 2-10小节

算法笔记@Ada_Lake

算法笔记代码保留地~~~

2.10小节——C/C++快速入门->黑盒测试

问题 A: A+B 输入输出练习I
  1. 题目描述 ,你的任务是计算a+b。这是为了acm初学者专门设计的题目。你肯定发现还有其他题目跟这道题的标题类似,这些问题也都是专门为初学者提供的。
  2. 输入,输入包含一系列的a和b对,通过空格隔开。一对a和b占一行。
  3. 输出,对于输入的每对a和b,你需要依次输出a、b的和。如对于输入中的第二对a和b,在输出中它们的和应该也在第二行。
  4. 样例输入,
    1 5
    10 20
  5. 样例输出,
    6
    30

我的理解
1.只说了包含一系列的a和b对。通过空格隔开。则不知道到底要输入多少个。
用 while…EOF
2.不用数组的话如何输入大量再输出?

她说的是依次输出。不是最后统一输出。
主要考察的是scanf("%d", &a) != EOF

3.ctrl+Z+Enter手动结束while
4.scanf("%s", str)等同于gets(str)
即 while(scanf("%s", str) != EOF)等同于 while(gets(str) != NULL)

以下是代码

// Ada
#include<stdio.h>

int main() {
	int a, b;
	while(scanf("%d %d", &a, &b) != EOF) {
		printf("%d\n", a + b);
	}
	
	return 0;
}
问题 B: A+B 输入输出练习II
  1. 题目描述 ,你的任务是计算a+b。
  2. 输入,第一行是一个整数N,表示后面会有N行a和b,通过空格隔开。
  3. 输出,对于输入的每对a和b,你需要在相应的行输出a、b的和。
    如第二对a和b,对应的和也输出在第二行。
  4. 样例输入,
    2
    1 5
    10 20
  5. 样例输出,
    6
    30

我的理解
题1是不知道循环多少次的情况下。题2是已知多少次

**以下是代码**
// Ada
#include<stdio.h>

int main(){
	int a, b, N;
	scanf("%d", &N);
	while( N-- ) {
		scanf("%d %d", &a, &b);
		printf("%d\n", a + b);
	}
	
	return 0;
}
问题 C: A+B 输入输出练习III
  1. 题目描述 ,你的任务是计算a+b。
  2. 输入,输入中每行是一对a和b。其中会有一对是0和0标志着输入结束,且这一对不要计算。
  3. 输出,对于输入的每对a和b,你需要在相应的行输出a、b的和。
    如第二对a和b,他们的和也输出在第二行。
  4. 样例输入,
    1 5
    10 20
    0 0
  5. 样例输出,
    6
    30

我的理解
条件加进去即可

**以下是代码**
// Ada
#include<stdio.h>

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

算法笔记上的两种写法:
** 法一:**

// Ada
#include<stdio.h>

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

法二 :

// Ada
#include<stdio.h>

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

== while((scanf("%d %d", &a, &b) != EOF), a||b) ==

问题 D: A+B 输入输出练习IV
  1. 题目描述 ,你的任务是计算若干整数的和。
  2. 输入,每行的第一个数N,表示本行后面有N个数。如果N=0时,表示输入结束,且这一行不要计算。
  3. 输出,对于每一行数据需要在相应的行输出和。
  4. 样例输入,
    4 1 2 3 4
    5 1 2 3 4 5
    0
  5. 样例输出,
    10
    15
    我的理解
    scanf("%d", &n)已经是把值放到了n中。不知道脑子抽什么疯
    以下是代码
// Ada
#include<stdio.h>

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

已经说了 不确定次数的时候应该用while…EOF ,为什么开始没这样写!!

问题 E: A+B 输入输出练习V
  1. 题目描述 ,你的任务是计算若干整数的和。
  2. 输入,输入的第一行是一个正数N,表示后面有N行。每一行的第一个数是M,表示本行后面还有M个数
  3. 输出,对于每一行数据需要在相应的行输出和。
  4. 样例输入,
    2
    4 1 2 3 4
    5 1 2 3 4 5
  5. 样例输出,
    10
    15
    我的理解
    总感觉自己没用上这节黑盒测试讲的输入输出
// Ada
#include<stdio.h>
int main(){
	int N, M, n;

	while(scanf("%d", &N) != EOF) {
		while(N--){
			scanf("%d", &M);
			int sum = 0;
			while(M--) {
				scanf("%d", &n);
				sum = sum + n;
			}
			printf("%d\n", sum);
		}	
	}
	
	return 0;
} 
问题 F: A+B 输入输出练习VI
  1. 题目描述 ,你的任务是计算若干整数的和。
  2. 输入,每行的第一个数N,表示本行后面有N个数。
  3. 输出,对于每一行数据需要在相应的行输出和。
  4. 样例输入,
    4 1 2 3 4
    5 1 2 3 4 5
  5. 样例输出,
    10
    15
    我的理解
    总感觉自己没用上这节黑盒测试讲的输入输出
// Ada
#include<stdio.h>
int main(){
	int N, n;
	while(scanf("%d", &N) != EOF) {
		int sum = 0;
		while(N--) {
			scanf("%d", &n);
			sum = sum + n;
		}
		printf("%d\n", sum);
	}
	
	return 0;
}
问题 G: A+B 输入输出练习VII
  1. 题目描述 ,你的任务是计算若干整数的和。

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

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

  4. 样例输入,
    1 5
    10 20

  5. 样例输出,
    6

    													30
    

我的理解
感觉就是问题A,加了一个额外输出一个换行符

// Ada
#include<stdio.h>
int main(){
	int a, b;
	while(scanf("%d%d", &a, &b) != EOF) {
		printf("%d\n", a + b);
		printf(“\n”);
	}
	
	return 0; 
} 
问题 H: A+B 输入输出练习VIII
  1. 题目描述 ,你的任务是计算若干整数的和。

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

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

  4. 样例输入,
    3
    4 1 2 3 4
    5 1 2 3 4 5
    3 1 2 3

  5. 样例输出,
    10

    													15
    													
    													6
    

我的理解
这里写的是每组之间!!
因此最后一个不多输出换行
在while(T–)中判断是否为T大于0

// Ada
#include<stdio.h>
int main() {
	int N, M, n;
	scanf("%d", &N);
	while(N--) {
		scanf("%d", &M);
		int sum = 0; 
		while(M--) {
			scanf("%d", &n);
			sum = sum + n;
		}
		printf("%d\n", sum); 
		if(N >= 1) {
			printf("\n"); 
		} 
	}
	
	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值