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

news/2024/12/26 18:46:41 标签: 算法, 图论, c++, 数据结构

打标记思想:

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

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

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


#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中存储最大字符,这样三个字符就完成了排序,具体程序代码如下:


#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

问题分析:

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


#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)来实现,所以针对上述代码可以修改为:

#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;
}

http://www.niftyadmin.cn/n/5800835.html

相关文章

Scala迭代更新

在Scala中&#xff0c;迭代器&#xff08;Iterator&#xff09;是一种用于遍历集合&#xff08;如数组、列表、集合等&#xff09;的元素而不暴露其底层表示的对象。迭代器提供了一种统一的方法来访问集合中的元素&#xff0c;而无需关心集合的具体实现。 在Scala中&#xff0c…

STM32和精准的型号STM32F03C8T6 ——ADC通道数目区别

注意表达方式的区别 5&#xff0e;STM32芯片内部集成的&#xff08;12&#xff09;位ADC是一种逐次逼近型模拟数字转换器&#xff0c;具 有&#xff08;18&#xff09;个通道&#xff0c;可测量&#xff08;16&#xff09;个外部和(2)个内部信号源。 书上原话&#xff1a;STM32…

反应力场的生成物、反应路径分析方法

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

生信软件开发2 - 使用PyQt5开发一个简易GUI程序

往期文章&#xff1a; 生信软件开发1 - 设计一个简单的Windwos风格的GUI报告软件 1. 使用PyQt5设计一个计算器主程序 要求PyQt5 > 5.6, calculator.py与MainWindow.py处于同一目录&#xff0c;下载mainwindow-weird.ui和mainwindow.ui资源&#xff0c;运行calculator.py即…

SpringBoot开发——Spring Boot 的9大类常用注解

文章目录 1. 组件相关注解1.1 @Controller:1.2 @Service:1.3 @Repository:1.4 @Component:2. 与 Bean 实例和生命周期相关的注解2.1 @Bean:2.2 @Scope:2.3 @Primary:2.4 @PostConstruct:2.5 @PreDestroy:3. 依赖注入注解3.1 @Autowired:3.2 @Resource:3.3 @Qualifie…

linux 常用 Linux 命令指南

常用 Linux 命令指南 以下是一些常用的 Linux 命令,分类并附带简单说明,适合日常操作和快速参考。 1. 文件与目录操作 ls: 列出当前目录下的文件和子目录ls -l # 显示详细信息 ls -a # 显示隐藏文件cd: 切换目录cd /path/to/directorypwd: 显示当前工作目录pwdmkdir: 创…

Java:188 基于springboot妇幼健康管理系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 本妇幼健康管理系统分为管理员、用户、医生三个权限。 管理员可以管理用户、医生的基本信息内容&#xff0c;可以管理药物信息以及患者预约信息等操作…

【express-generator】02-路由基本使用+api工具测试路由

上篇回顾 上一篇&#xff0c;我们介绍了安装创建和初始化一个express-generator应用程序&#xff0c;并且给了一些注意点&#xff0c;相信跟着步骤&#xff0c;你也可以做到文章里呈现的效果。 这一篇&#xff0c;我们有两大主题&#xff1a;路由的基本使用、api工具测试路由。…