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

打标记思想:

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

以布尔类型变量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;
}
相关推荐
没事就去码1 分钟前
RBTree(红黑树)
数据结构·c++
zyx没烦恼8 分钟前
【C++11】包装器
开发语言·c++
不会kao代码的小王11 分钟前
从零开始搭建 AI 音乐生成器:MusicGPT 的超简单部署指南
科技·算法·开源·powerpoint
溟洵11 分钟前
【C++】异步(并发)实现 线程池 ---附源码+实现步骤(future、async、promise、package_task、任务池原理和框架)
服务器·网络·c++·分布式·后端
就爱学编程23 分钟前
重生之我在异世界学编程之数据结构与算法:单链表篇
数据结构·算法·链表
CSCN新手听安6 小时前
list的常用操作
数据结构·list
编程之路,妙趣横生6 小时前
list模拟实现
c++
梅茜Mercy8 小时前
数据结构:链表(经典算法例题)详解
数据结构·链表
88号技师8 小时前
2024年12月一区SCI-加权平均优化算法Weighted average algorithm-附Matlab免费代码
人工智能·算法·matlab·优化算法
IT猿手8 小时前
多目标应用(一):多目标麋鹿优化算法(MOEHO)求解10个工程应用,提供完整MATLAB代码
开发语言·人工智能·算法·机器学习·matlab