C/C++输出硬币翻转 2021年6月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录

C/C++硬币翻转

一、题目要求

1、编程实现

2、输入输出

二、算法分析

三、程序编写

四、程序说明

五、运行结果

六、考点分析


C/C++硬币翻转

2021年6月 C/C++编程等级考试一级编程题

一、题目要求

1、编程实现

假设有N个硬币(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于正面向上的状态;有M个人(M为不大于N的正整数)也从1到M依次编号。

第一个人(1号)将硬币全部翻转一次,第二个人(2号)将编号为2的倍数的硬币翻转一次,第三个人(3号)将编号为3的倍数的硬币翻转一次。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的硬币翻转一次。

请问:当第M个人操作之后,哪些硬币是正面向上的,按从小到大输出其编号,以空格分开。

时间限制:10000

内存限制:65536

2、输入输出

**输入描述:**输入正整数N和M,以单个空格隔开。

**输出描述:**顺次输出正面向上的硬币的编号,其间用空格间隔。

输入样例:

10 10

输出样例:

2 3 5 6 7 8 10

二、算法分析

  1. 题目相对下朋友们来说有一定的难度,难在如何让每个人对符合要求的硬币进行翻转操作
  2. 由于人和硬币都是有多个,量较大,所以采用所学的一维数组来完成是比较好的方案
  3. 在确定采用数组后需要先设定数组的初值用1表示正面朝上,0表示反面朝上
  4. 然后最主要的就是对硬币的操作,应该是每个人都能对所有的硬币,只是要符合自己编号的硬币进行反向操作,所以这里可以使用嵌套for循环实现比较方便
  5. 外层循环为人,内层循环为硬币,接着就可以将每个硬币进行分析判断是否是人的编号倍数,如果是就进行反向操作即可
  6. 最后输出数组中数字为1的编号就是硬币正面朝上的编号

三、程序编写

cpp 复制代码
#include<iostream> 
using namespace std;
int a[5000];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		a[i] = 1;
	}
	for(int i=1;i<=m;i++)//i表示人 
	{
		for(int j=i;j<=n;j++)//j表示硬币 
		{
			if(j%i == 0)
			{
				a[j] = !a[j];
			}
		}
	}
	//输出符合要求的 
	for(int i=1;i<=n;i++)
	{
		if(a[i] == 1)
		{
			cout<<i<<" ";
		}
	}
	return 0;
}

四、程序说明

  1. 首先需要导入输入输出流头文件
  2. 接着再次导入输入输出流格式控制头文件
  3. 然后是引入std命名空间中的所有成员到当前的程序中,这样在当前的程序中就可以直接使用 std 命名空间中的所有成员,而不需要使用的时候在成员前面加上(std::)前缀
  4. 声明一个一维整型数组a,维度大小为5000
  5. 接着声明程序的入口,也就是主函数(主函数在一个程序中只允许出现一次)
  6. 根据题目要求声明一个整形变量(n表示硬币数,m表示人数)
  7. 接着对a数组进行初始化(用for循环),用1表示正面朝上,0表示背面朝上
  8. 使用嵌套for循环(外层人,内层硬币)逐个遍历
  9. 在利用if条件判断语句,判断当前的硬币是否是人的倍数,如果是就对数组元素进行取反操作
  10. 最后再次利用for循环遍历整个数组,结合if条件判断语句判断当前元素是否为1
  11. 如果是利用输出流对象cout,输出对应的编号即可
  12. 最后返回0,程序结束

本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102

五、运行结果

cpp 复制代码
10 10

2 3 5 6 7 8 10

六、考点分析

难度级别:中等,这题相对而言还是有一点难度,具体主要考查如下:

  1. 学会题目分析,算法分析,找到解题思路
  2. 充分掌握变量的定义和使用
  3. 学会输入流对象 in的使用,从键盘读入相应的数据
  4. 学会数组的声明、数组的输入及数组的输出
  5. 学会for循环以及嵌套循环的使用,在确定循环次数的时候推荐使用学会
  6. 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
  7. 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
  8. 充分掌握变量定义和使用、数组操作、循环语句和简单算法知识的使用及输入输出的用法

PS:方式方法有多种,小朋友们只要能够达到题目要求即可!

相关推荐
limingade2 小时前
手机实时提取SIM卡打电话的信令和声音-新的篇章(一、可行的方案探讨)
物联网·算法·智能手机·数据分析·信息与通信
jiao000015 小时前
数据结构——队列
c语言·数据结构·算法
迷迭所归处6 小时前
C++ —— 关于vector
开发语言·c++·算法
leon6256 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林6 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z7 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
Aic山鱼7 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
天玑y7 小时前
算法设计与分析(背包问题
c++·经验分享·笔记·学习·算法·leetcode·蓝桥杯
sjsjs117 小时前
【数据结构-一维差分】力扣1893. 检查是否区域内所有整数都被覆盖
数据结构·算法·leetcode
redcocal8 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘