当前位置: 首页 > article >正文

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

打标记思想:

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

以布尔类型变量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.kler.cn/a/452144.html

相关文章:

  • YOLO原理讲解
  • Flink调优----反压处理
  • 中国农业科学院深圳农业基因组研究所合成生物学研究中心-随笔06
  • ajax中get和post的区别,datatype返回的数据类型有哪些?web开发中数据提交的几种方式,有什么区别。
  • MySQL 8.0:explain analyze 分析 SQL 执行过程
  • MySQL 数据库优化详解【Java数据库调优】
  • MySQL HA 方案 MMM、MHA、MGR、PXC 对比
  • Hive SQL 窗口函数 `ROW_NUMBER() ` 案例分析
  • PCA降维MATLAB代码解释及应用场景
  • 如何在 Ubuntu 22.04 上安装和使用 Composer
  • 《解锁分类神经网络预训练模型的奇妙世界》
  • uniapp input苹果中文键盘输入拼音直接切换输入焦点监听失效
  • 删除VSCode上 origin/分支名,但GitLab上实际上不存在的分支
  • 攻防世界 ics-06
  • 基于单片机的智能递口罩机器人设计
  • 【前端知识】强大的js动画组件anime.js
  • CSharp: Oracle Stored Procedure query table
  • Mac怎么远程控制Windows?
  • SpringBoot项目的5种搭建方式(以idea2017为例)
  • 敏感词 v0.24.0 新特性支持标签分类,内置实现多种策略
  • LabVIEW数字式气压计自动检定系统
  • 计算机视觉-人工智能(AI)入门教程一
  • PyCharm专项训练4 最小生成树算法
  • MySQL 数据”丢失”事件之 binlog 解析应用
  • 【Java 数据结构】移除链表元素
  • 某家政小程序系统 httpRequest 任意文件读取