信息学奥赛初赛天天练-34-CSP-J2021完善程序-按位异或、模拟算法、数组模拟环、约瑟夫问题应用

news2024/9/20 8:07:25

PDF文档公众号回复关键字:20240624

在这里插入图片描述

2021 CSP-J 完善程序3

1 完善程序 (单选题 ,每小题3分,共30分)

(Josephus问题)有n个人围成一个圈,依次标号0至n-1。从0号开始,依次 0,1,0,1…交替报数,报到1的人会离开,直至只剩下一个人。求最后剩下人的编号

#include<stdio.h>

const int MAXN=1000000;
int F[MAXN];

int main(){
	int n;
	scanf("%d",&n);
	int i=0,p=0,c=0;
	while(①){
		if(F[i]==0){
			if(②){
				F[i]=1;
				③;
			}
			④
		}
		⑤;
	}
	int ans=-1;
	for(i=0;i<n;i++)
		if(F[i]==0)
			ans=i;
	printf("%d\n",ans);
	return 0; 
} 

34.①处应填( )

A. i<n

B. c<n

C. i<n-1

D. c<n-1

35.②处应该填( )

A. i%2==0

B. i%2==1

C. p

D. !p

36.③处应该填( )

A. i++

B. i=(i+1)%n

C. c++

D. p^=1

37.④处应该填( )

A. i++

B. i=(i+1)%n

C. c++

D. p^=1

38.⑤处应该填( )

A. i++

B. i=(i+1)%n

C. c++

D. p^=1

2 相关知识点

1) 异或运算

异或运算(XOR)是一种基本的数学运算符,应用于逻辑运算,其数学符号为“⊕”,计算机符号为“xor”

异或运算的运算法则为:如果两个值不相同,则异或结果为1;如果两个值相同,则异或结果为0

//示例
2 xor 3 = 1
具体过程如下
2 对应二进制 0010
3 对应二进制 0011
    0010
    0011
xor
----------
    0001

C++语言中 异或符号为 ^

p^=1等价p=p^1

p为0时 p^1=0^1=1
具体过程如下
0对应二进制为 0000
1对应二进制为 0001
    0000
    0001
xor
----------
    0001
    
p为1时 p^1=1^1=0
具体过程如下
1对应二进制为 0001
    0001
    0001
xor
----------
    0000

2) 约瑟夫问题

约瑟夫问题特征是有环,到最大人数后重新数,因此使用数组模拟约瑟夫问题时,达到最大需要从头开始

一轮需要有一人出去,需要一个变量标识一轮的开始结束

需要保留1人,需要一个变量统计出去的人数,进而和总人数比较

3 思路分析

34.①处应填( D )

A. i<n

B. c<n

C. i<n-1

D. c<n-1

分析

/*
 模拟每个人的位置,到达最大位置,重新开始
 p表示2人出去1人的一轮对应的值,即0 1,由于只有2次,所以当前人p为0时,下一个人p就为1
 c出去的人数
*/
int i=0,p=0,c=0;
	while(①){
		if(F[i]==0){
			if(②){
				F[i]=1;
				③;
			}
			④
		}
		⑤;
	}
/*
  由于c的初始值为0,即c为0时可以出去1人,接着c为1时继续判定可以出去1人,加上前面c为0时出去1人,总共可以出去2人
  c为n-2时可以出去n-1人,c为n-1时可以出去n人
  目标需要出去n-1人,c最大为n-2,所以判定条件为c<n-1
*/

35.②处应该填( C )

A. i%2==0

B. i%2==1

C. p

D. !p

分析

/*
 模拟每个人的位置,到达最大位置,重新开始
 p表示2人出去1人的一轮对应的值,即0 1,由于只有2次,所以当前人p为0时,下一个人p就为1
 c出去的人数
*/
int i=0,p=0,c=0;
	while(①){
		if(F[i]==0){
			if(②){
				F[i]=1;
				③;
			}
			④
		}
		⑤;
	}
/*
  for(i=0;i<n;i++)
		if(F[i]==0)
			ans=i;
  根据上面代码可知,输出ans是剩余的人的编号,判定是F[i]==0,所以出去的人是F[i]==1
  F[i]==0 改为 F[i]=1; 说明是F[i]=1时标记为出去
  此处是判定出去条件成立,由于是0 1 中,1出去,p初始为0,所以只有p为true或为1时才出去
  因此选C
*/

36.③处应该填( C )

A. i++

B. i=(i+1)%n

C. c++

D. p^=1

分析

/*
 模拟每个人的位置,到达最大位置,重新开始
 p表示2人出去1人的一轮对应的值,即0 1,由于只有2次,所以当前人p为0时,下一个人p就为1
 c出去的人数
*/
int i=0,p=0,c=0;
	while(①){
		if(F[i]==0){
			if(②){
				F[i]=1;
				③;
			}
			④
		}
		⑤;
	}
/*
  c为出去的人数,符号出去的条件c累加
  所以选C
*/

37.④处应该填( D )

A. i++

B. i=(i+1)%n

C. c++

D. p^=1

分析

/*
 模拟每个人的位置,到达最大位置,重新开始
 p表示2人出去1人的一轮对应的值,即0 1,由于只有2次,所以当前人p为0时,下一个人p就为1
 c出去的人数
*/
int i=0,p=0,c=0;
	while(①){
		if(F[i]==0){
			if(②){
				F[i]=1;
				③;
			}
			④
		}
		⑤;
	}
/*
  p变量模拟01变化值,下1个为0,再下1个为1,只要数数,就会变化:0变1,1变0
  p^=1 等价 p = p^1;  -- 0通过p^1可以变为1,1通过p^1可以变为0
  所以选D
*/

38.⑤处应该填( B )

A. i++

B. i=(i+1)%n

C. c++

D. p^=1

分析

/*
 模拟每个人的位置,到达最大位置,重新开始
 p表示2人出去1人的一轮对应的值,即0 1,由于只有2次,所以当前人p为0时,下一个人p就为1
 c出去的人数
*/
int i=0,p=0,c=0;
	while(①){
		if(F[i]==0){
			if(②){
				F[i]=1;
				③;
			}
			④
		}
		⑤;
	}
/*
  通过对n取余,保证出去下标不会超过n,用数组模拟环
  所以选B
*/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1858538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uni-starter:云端一体应用快速开发的新选择

一、引言 随着移动互联网的快速发展&#xff0c;应用开发面临着日益增长的效率挑战。如何在保证应用功能丰富性的同时&#xff0c;快速迭代和上线&#xff0c;成为了众多开发者关注的焦点。在这样的背景下&#xff0c;uni-starter作为一款集成商用项目常见功能的云端一体应用快…

C++初学者指南-2.输入和输出---命令行参数

C初学者指南-2.输入和输出—命令行参数 文章目录 C初学者指南-2.输入和输出---命令行参数1.这是什么&为什么这样&#xff1f;2.如何在C中访问3.转换为std::string、int......4.字符串到数字的转换函数5.命令行参数解析库 1.这是什么&为什么这样&#xff1f; 程序调用后…

Halcon 根据霍夫变换在图像中寻找直线

一 霍夫变换 1 定义 霍夫变换是图像处理中从图像中识别几何形状的基本方法之一.几何形状包括圆&#xff0c;椭圆&#xff0c;直线等等. 2 直线方程 直线的方程可以用yk*xb 来表示&#xff0c;其中k和b是参数&#xff0c;分别是斜率和截距; 3 霍夫变换原理&#xff1a; 设…

本地服务怎么发布成rpc服务

目录 1.引入 2.user.proto 3.userservice.cc 1.引入 example文件夹作为我们框架项目的使用实例&#xff0c;在example文件夹下创建callee和caller两个文件夹 callee是RPC服务的提供者。在callee创建一个文件&#xff1a;userservice.cc 我们有没有这样一个框架&#xff0c;把…

VMware Workstation安装Windows Server2019系统详细操作步骤

虚拟机版本 VMware Workstation 16 Prp 16.2.5 build-20904516 实现操作 创建虚拟机 创建新的虚拟机 自定义->下一步 默认即可&#xff0c;下一步 稍后安装操作系统->下一步 按照图下所示选择好系统->下一步 设置好虚拟机名称和位置->下一步 默认即可&#xff0…

ONLYOFFICE桌面编辑器8.1版:个性化编辑和功能强化的全面升级

ONLYOFFICE是一款全面的办公套件&#xff0c;由Ascensio System SIA开发。该软件提供了一系列与微软Office系列产品相似的办公工具&#xff0c;包括处理文档&#xff08;ONLYOFFICE Document Editor&#xff09;、电子表格&#xff08;ONLYOFFICE Spreadsheet Editor&#xff0…

React+TS 从零开始教程(3):useState

源码链接&#xff1a;下载 在开始今天的内容之前呢&#xff0c;我们需要先看一个上一节遗留的问题&#xff0c;就是给属性设置默认值。 我们不难发现&#xff0c;这个defaultProps已经被废弃了&#xff0c;说明官方并不推荐这样做。其实&#xff0c;这个写法是之前类组件的时候…

Excel 宏录制与VBA编程 —— 12、文本字符串类型相关(附示例)

字符串分割&#xff0c;文末示例&#xff08;文末代码3附有源码&#xff09; 代码1 - 基础字符串 代码2 - 字符串拆分 代码3 - 字符串分割 Option ExplicitSub WorkbooksClear()Dim DataRange As RangeSet DataRange Range("C2:E12")DataRange.Clear End SubSub Wo…

QGIS在VS2019开发

QGIS二次开发&#xff08;1&#xff09;—加载矢量、栅格图层&#xff08;QGIS 2.14.16 && Qt-4.8.6 && VS2010 &#xff09;_qgis开发教程-CSDN博客 VS2019QT5.15.2QGIS二次开发环境搭建&#xff08;非源码方式&#xff09;_qt qgis-CSDN博客 也许面向对象课…

MVVM——CommunityToolKit第三方详情

CommunityToolkit是微软推出的轻量级工具包&#xff0c;它集成了现代、快速和模块化的 MVVM 库。 安装 在NuGet 工具箱上搜索CommunityToolKit进行下载 观测对象 ObservableObject ObservableObject 是通过实现 INotifyPropertyChanged 和 INotifyPropertyChanging 接口可观…

单门户上集成多种数据库查询入口

&#xff08;作者&#xff1a;陈玓玏&#xff09; 开源项目&#xff0c;欢迎star哦&#xff0c;https://github.com/tencentmusic/cube-studio 在一家公司&#xff0c;我们通常会有多种数据库&#xff0c;每种数据库因为其特性承担不同的角色&#xff0c;比如mysql这种轻量…

红队内网攻防渗透:内网渗透之内网对抗:横向移动篇域控系统提权NetLogonADCSPACKDC永恒之蓝CVE漏洞

红队内网攻防渗透 1. 内网横向移动1.1 横向移动-域控提权-CVE-2020-1472 NetLogon1.2 横向移动-域控提权-CVE-2021-422871.3 横向移动-域控提权-CVE-2022-269231.4 横向移动-系统漏洞-CVE-2017-01461.5 横向移动-域控提权-CVE-2014-63241. 内网横向移动 1、横向移动-域控提权-…

LeetCode.32最长有效括号详解

问题描述 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号子串的长度。 解题思路1 有效的括号字符串意味着每一个左括号 ( 都可以找到一个相匹配的右括号 )。栈可以帮助我们追踪尚未匹配的括号&#xff0c;并有效地处理…

缓存雪崩、穿透、击穿的概念和如何避免

雪崩 概念 高并发请求多个key&#xff0c;此时多个key同时失效、不在缓存中&#xff0c;请求全部打到数据库&#xff0c;使数据库无法处理这么多的连接&#xff0c;导致数据库死机 如何避免 防止多个key同时过期&#xff0c;设置随机的过期时间不设置过期时间&#xff0c;有…

编程精粹—— Microsoft 编写优质无错 C 程序秘诀 08:剩下的就是态度问题

这是一本老书&#xff0c;作者 Steve Maguire 在微软工作期间写了这本书&#xff0c;英文版于 1993 年发布。2013 年推出了 20 周年纪念第二版。我们看到的标题是中译版名字&#xff0c;英文版的名字是《Writing Clean Code ─── Microsoft’s Techniques for Developing》&a…

chatglm系列知识

一、目录 chatglm 是什么语言模型与transformer decoder 的区别解释prefix LM与Cause LMchatglm&#xff08;prefix LM&#xff09;与decoder-only LM 核心区别glm 架构chatglm 预训练方式chatglm 微调chatglm与chatglm2、chatglm3的区别chatglm 激活函数采用gelu, 为什么chat…

融资融券账户与普通账户有何区别?一文读懂为什么要开通两融账户

01 融资融券账户与普通账户的区别 1、开通条件不同&#xff1a; ①普通账户&#xff1a;开户的门槛低&#xff0c;一般年满18岁以上就能开通。&#xff08;70岁以上需要临柜开户&#xff09;。 ②融资融券&#xff1a;融资融券的准入门槛相对较高&#xff0c;需要满足以下几…

SQLite3的使用

14_SQLite3 SQLite3是一个嵌入式数据库系统&#xff0c;它的数据库就是一个文件。SQLite3不需要一个单独的服务器进程或操作系统&#xff0c;不需要配置&#xff0c;这意味着不需要安装或管理&#xff0c;所有的维护都来自于SQLite3软件本身。 安装步骤 在Linux上安装SQLite…

python桌面应用

py文件 import osimport wx import wx.html2class MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, title"启动啦", size(1000, 700))# 创建一个Web视图组件self.browser wx.html2.WebView.New(self)# 加载本地HTML文件# self.brow…