全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之分支结构(实战训练三)

打标记思想:

标记的思想类似于贴封条,采用标记的方法,可以形象地将其比喻为"贴上封条"来确保某地的状态未被改变。为了监控某个地点在进行操作后是否遭到了未经授权的变动,可以在该地点设置一个标记,随后只需检查这个标记的位置或状态是否发生了变动。

以布尔类型变量flag为例,可以在初始阶段将其设定为"true",这个过程称之为变量的初始化。接着,一旦某个特定的操作成功完成,就可以将flag的值修改为"false"。最后,通过检查flag的值是否发生了改变,就可以准确地判断先前的操作是否已经成功执行。

实战训练1---阅读下面程序,写成结果。

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
   	bool flag = true;
	int n;
	cin>>n;
	if(n%2==0){
		flag = false;
	}
	if(flag){
		cout<<"YES"<<endl;
	}else{
		cout<<"NO"<<endl;
	}
	return 0;
}

键盘输入: 9

输出结果:YES

问题分析:

代码第4行定义了一个bool类型变量flag并初始化为true,第5行定义一个变量n,第6行输入值,假设输入值为9;紧接着在if中判断n对2取余是否为0,即是否能被2整除,是否是偶数,如果条件成立,将flag设置为false;第10行的if语句通过flag的取值来判断数的奇偶性,如果flag的值为true,则n为奇数,如果flag的值为false,则n为偶数。本题输入9,9为奇数,所以输出结果为"YES"

实战训练2---字母排序

问题描述:

输入三个字母(严格区分大小写),按字典顺序输出它们。

输入格式:

输入三个字母

输出格式:

输出字母,按照字典顺序输出它们。

输入输出样例:

|-------|-------|
| 输入样例1 | 输出样例1 |
| dcb | bcd |
| 输入样例2 | 输出样例2 |
| AaB | ABa |

问题分析:

根据题意,首先定义三个字符变量a、b、c并输入值,字符比较首先将字符转换成Unicode值(即整数值),根据值的大小确定先后顺序,大写字母的值小于小写字母,所以大写字母在前,小写字母在后。先让a与b进行比较,如果a比b大,则交换a和b;再将a和c进行比较,如果a比c大,则交换a和c,这样a就存储了这三个字符中最小的字符;接下来比较b和c的值,如果b大于c,则交换b和c,这样b中存储了次小字符,c中存储最大字符,这样三个字符就完成了排序,具体程序代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
   	char a,b,c;//定义字符变量a、b、c
	cin>>a>>b>>c;//输入a、b和c
	if(a>b){//比较字符a和b的大小,如果a比b大 ,交换a和b 
		char tmp = a;
		a = b;
		b = tmp; 
	} 
	if(a>c){//比较字符a和c的大小,如果a比c大,则交换a和c 
		char tmp = a;
		a = c;
		c = tmp; 
	} 
	if(b>c){//比较字符b和c的大小,如果b比c大,则交换b和c 
		char tmp = b;
		b = c;
		c = tmp;
	}
	cout<<a<<b<<c<<endl;//从小到大输出a b c 的值 
	return 0;
}

实战训练3---最大值与最小值

问题描述:

小明和小敏玩一个游戏,他们手中各有三个整数,小明用手中的一个数字乘以小敏手中的一个数字,这样三个数配对得到乘积,并将三个乘积求和。请帮忙编写程序实现求得这个和的最大值maxv 和最小值minv。

输入格式:

第一行三个整数 a1,a2,a3,用空格隔开,表示小明手中的三个数。

第二行三个整数 b1,b2,b3,用空格隔开,表示小敏手中的三个数。

0<=a1,a2,a3<=9999

0<=b1,b2,b3<=9999

输出格式:

一行两个整数,minv和maxv表示最小值和最大值,用空格隔开

输入输出样例:

|-------------|-------|
| 输入样例1 | 输出样例2 |
| 4 8 3 6 2 5 | 54 74 |

问题分析:

将小明和小敏手中的三个数字分别从小到大排序,将小明手中的数字从小到大和小敏手中的三个数从大到小对应相乘求和,得到最小值;将小明和小敏手中的三个数字从小到大排序,然后依次配对相乘求和,得到就是最大值。具体程序代码如下:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	int a1,a2,a3;//定义小明手中的数字变量a1,a2,a3
	int b1,b2,b3;//定义小敏手中的数字变量b1,b2,b3
	int minv,maxv;//定义乘积和的最大值maxv和最小值minv 
	cin>>a1>>a2>>a3;//输入a1,a2,a3的值
	cin>>b1>>b2>>b3;//输入b1,b2,b3的值
	//首先将a1,a2,a3从小到大排序
	if(a1>a2) {
		int tmp = a1;
		a1 = a2;
		a2 = tmp;
	}
	if(a1>a3) {
		int tmp = a1;
		a1 = a3;
		a3 = tmp;
	}
	if(a2>a3) {
		int tmp = a2;
		a2 = a3;
		a3 = tmp;
	}
	//将b1,b2,b3从小到大排序
	if(b1>b2) {
		int tmp = b1;
		b1 = b2;
		b2 = tmp;
	}
	if(b1>b3) {
		int tmp = b1;
		b1 = b3;
		b3 = tmp;
	}
	if(b2>b3) {
		int tmp = b2;
		b2 = b3;
		b3 = tmp;
	}
	minv = a1*b3+a2*b2+a3*b1; //求对应数字相乘求和(a1,a2,a3从小到大,b3,b2,b1从大到小) 
	maxv = a1*b1+a2*b2+a3*b3;//求对应数字相乘求和(a1,a2,a3从小到大,b1,b2,b3从小到大)
	cout<<minv<<' '<<maxv<<endl;
	return 0;
}

从程序中可以看出,交换两个数的代码相对多,在C++中交换两个数有一个专门的函数swap可以实现交换,例如将a和b的值交换,可以使用swap(a,b)来实现,所以针对上述代码可以修改为:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main() {
	int a1,a2,a3;//定义小明手中的数字变量a1,a2,a3
	int b1,b2,b3;//定义小敏手中的数字变量b1,b2,b3
	int minv,maxv;//定义乘积和的最大值maxv和最小值minv 
	cin>>a1>>a2>>a3;//输入a1,a2,a3的值
	cin>>b1>>b2>>b3;//输入b1,b2,b3的值
	//首先将a1,a2,a3从小到大排序
	if(a1>a2) {
		swap(a1,a2); 
	}
	if(a1>a3) {
		swap(a1,a3);
	}
	if(a2>a3) {
		swap(a2,a3);
	}
	//将b1,b2,b3从小到大排序
	if(b1>b2) {
		swap(b1,b2);
	}
	if(b1>b3) {
		swap(b1,b3);
	}
	if(b2>b3) {
		swap(b2,b3);
	}
	minv = a1*b3+a2*b2+a3*b1; //求对应数字相乘求和(a1,a2,a3从小到大,b3,b2,b1从大到小) 
	maxv = a1*b1+a2*b2+a3*b3;//求对应数字相乘求和(a1,a2,a3从小到大,b1,b2,b3从小到大)
	cout<<minv<<' '<<maxv<<endl;
	return 0;
}
相关推荐
mit6.8241 小时前
并查集|栈
c++
中国胖子风清扬1 小时前
Rust 序列化技术全解析:从基础到实战
开发语言·c++·spring boot·vscode·后端·中间件·rust
j_xxx404_1 小时前
数据结构:栈和队列力扣算法题
c语言·数据结构·算法·leetcode·链表
南莺莺1 小时前
假设一个算术表达式中包含圆括号、方括号和花括号3种类型的括号,编写一个算法来判别,表达式中的括号是否配对,以字符“\0“作为算术表达式的结束符
c语言·数据结构·算法·
THMAIL2 小时前
深度学习从入门到精通 - 神经网络核心原理:从生物神经元到数学模型蜕变
人工智能·python·深度学习·神经网络·算法·机器学习·逻辑回归
野犬寒鸦2 小时前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
墨染点香2 小时前
LeetCode 刷题【61. 旋转链表】
算法·leetcode·职场和发展
岁忧2 小时前
(LeetCode 面试经典 150 题) 200. 岛屿数量(深度优先搜索dfs || 广度优先搜索bfs)
java·c++·leetcode·面试·go·深度优先
一枝小雨2 小时前
【OJ】C++ vector类OJ题
数据结构·c++·算法·leetcode·oj题
一枝小雨2 小时前
【C++】Vector完全指南:动态数组高效使用
开发语言·c++·笔记·vector·学习笔记·std库