开灯问题 c++

2023-12-26 14:08
文章标签 c++ 问题 开灯

本文主要是介绍开灯问题 c++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

注:如果觉得有问题,可以一起讨论哦

 问题:有n盏灯,编号为1~n,第一个人把所有的灯打开,第二个人按下所有编号为2的倍数的开关(这些灯将被关掉),第三个人按下所有编号为3的倍数的开关(期中关掉的将被打开,打开的将被关掉)依此类推,一共有k个人,问最后有哪些灯开着,输入n和k,输出开着的灯的编号。k<=n<=1000

样例输入:

7 3

样例输出:

1 5 6 7


【分析】:用数组flag[],flag[0],flag[1],flag[2]....flag[n]表示灯1,2,3.。。。n是否开着。首先将他们全置为0,表示他们都开着,1则表示关了灯。

用例子来分析,7盏灯,3个人


因为flag[i]是会动态改变的,所以解题关键就是如何动态的去改变flag[i]的值

由图所见它和((i+1)%j==0)有关,如果i能整除j,那么flag[i]原来的值就要改变。

假设int a=((i+1)%j==0))=1

当j=2时,flag[2]由0变为1,flag[4]由0变为1,flag[6]由0变为1

当j=3时,flag[3]由0变为1,flag[6]由1变为0。

flag[i]到底和a有着什么样的关系?不难想象,他们是异或关系。

即flag[i]=((i+1)%j) xor flag[i]。

那我们要怎么样在代码中表示异或呢?

我们除了要判断i是否整除j,还要判断它是否和flag[i]的值是否一样,如果不一样,flag[i]就置1。

为了结果之间加空格,所以加了一个变量d,第一个结果肯定不能有空格,所以初始化d=0;当d=0时,不输出空格。d不等于0,就输出空格。

输入第一个结果后,d++;


所以代码很简单

       

                    /**开灯问题**/#include "stdafx.h"
#include <string.h>
#define maxn 1010
int flag[maxn];
int _tmain(int argc, _TCHAR* argv[])
{int n,k,d=0;scanf("%d%d",&n,&k);for(int i=0;i<n;i++){flag[i]=0;//打开//printf("%d\n",flag[i]);for(int j=2;j<=k;j++){if((i+1)%j==0){if(((i+1)%j==0)==flag[i])flag[i]=0;else flag[i]=1;}//printf("%d[%d]:%d\n",j,i,flag[i]);}//结果之间加空格   if(flag[i]==0){if(d==0){printf("%d",i+1);d++;}else printf(" %d",i+1);}}printf("\n");return 0;
}


这篇关于开灯问题 c++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/539706

相关文章

C++统计函数执行时间的最佳实践

《C++统计函数执行时间的最佳实践》在软件开发过程中,性能分析是优化程序的重要环节,了解函数的执行时间分布对于识别性能瓶颈至关重要,本文将分享一个C++函数执行时间统计工具,希望对大家有所帮助... 目录前言工具特性核心设计1. 数据结构设计2. 单例模式管理器3. RAII自动计时使用方法基本用法高级用法

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Web服务器-Nginx-高并发问题

《Web服务器-Nginx-高并发问题》Nginx通过事件驱动、I/O多路复用和异步非阻塞技术高效处理高并发,结合动静分离和限流策略,提升性能与稳定性... 目录前言一、架构1. 原生多进程架构2. 事件驱动模型3. IO多路复用4. 异步非阻塞 I/O5. Nginx高并发配置实战二、动静分离1. 职责2

解决升级JDK报错:module java.base does not“opens java.lang.reflect“to unnamed module问题

《解决升级JDK报错:modulejava.basedoesnot“opensjava.lang.reflect“tounnamedmodule问题》SpringBoot启动错误源于Jav... 目录问题描述原因分析解决方案总结问题描述启动sprintboot时报以下错误原因分析编程异js常是由Ja

深入解析C++ 中std::map内存管理

《深入解析C++中std::map内存管理》文章详解C++std::map内存管理,指出clear()仅删除元素可能不释放底层内存,建议用swap()与空map交换以彻底释放,针对指针类型需手动de... 目录1️、基本清空std::map2️、使用 swap 彻底释放内存3️、map 中存储指针类型的对象

MySQL 表空却 ibd 文件过大的问题及解决方法

《MySQL表空却ibd文件过大的问题及解决方法》本文给大家介绍MySQL表空却ibd文件过大的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录一、问题背景:表空却 “吃满” 磁盘的怪事二、问题复现:一步步编程还原异常场景1. 准备测试源表与数据

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SysMain服务可以关吗? 解决SysMain服务导致的高CPU使用率问题

《SysMain服务可以关吗?解决SysMain服务导致的高CPU使用率问题》SysMain服务是超级预读取,该服务会记录您打开应用程序的模式,并预先将它们加载到内存中以节省时间,但它可能占用大量... 在使用电脑的过程中,CPU使用率居高不下是许多用户都遇到过的问题,其中名为SysMain的服务往往是罪魁

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

MySQ中出现幻读问题的解决过程

《MySQ中出现幻读问题的解决过程》文章解析MySQLInnoDB通过MVCC与间隙锁机制在可重复读隔离级别下解决幻读,确保事务一致性,同时指出性能影响及乐观锁等替代方案,帮助开发者优化数据库应用... 目录一、幻读的准确定义与核心特征幻读 vs 不可重复读二、mysql隔离级别深度解析各隔离级别的实现差异