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

趣味算法------开灯问题

题目描述


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

输入格式
输入一组数据:n 和 k,中间空格隔开。

输出格式
输出开灯的编号。

输入样例1
输入
4 3
输出
1
输入样例2
输入
7 3
输出
1
5
6
7
输入样例3
输入
10 6
输出
1
4
7
8
10
输入样例4
输入
15 1
输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
输入样例5
输入
21 5
输出
1
4
6
7
8
10
11
13
15
16
17
18
19

思路解析:

        在开始之前我要介绍一个运算符符号“^”,这个运算符号在C语言中表达的含义是异或,两个数字都为1或者0,异或值为0,一个为1另一个为0,异或值则为1。

        为了方便大家理解,可以将开灯关灯的过程也包含在代码中(虽然运行会比较慢),我们可以定义一个一维数组表示一排灯,下标则为对应灯的编号。数组值1,0表示灯的状态分别是开灯和关灯,编写一个函数,模拟开灯关灯。

具体代码:

#include<stdio.h>

int arr[100] = {0};

int n;

void fun(int k)

{

    for(int i = k;i<=n;i+=k)

        arr[i] = 1^arr[i];//1变0,0变1

}//模拟第k个人开灯关灯操作。

int main(void)

{

    int k;

    scanf("%d%d",&n,&k);

    for(int i = 1;i<=k;i++)

        fun(i);//让k个人轮流执行开灯关灯操作。

    for(int i = 1;i<=n;i++)

        if(arr[i])//如果还有灯为开的状态,打印该编号。

            printf("%d\n",i);

}

留言:

        基础题也讲过不少了,之后我打算开启图论的内容,会比较难,不过当然还是从最简单的开始,修行在当下,诸君切莫急。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • React 中的 useContext 和 useReducer
  • 搭建高可用OpenStack(Queen版)集群(六)之部署Neutron控制/网络节点集群
  • 【秋招突围】2024届校招-拼多多笔试题-第一套
  • rk3568 android12 hdmi、耳机、喇叭音频切换
  • k8s(六)---pod
  • 【Material-UI】Checkbox 组件中的 Label Placement 设置详解
  • 基于SpringBoot+Vue的校园失物招领系统(带1w+文档)
  • 【产品经理】产品经理的产出有哪些?产品方案解决方案有哪些?
  • 零基础5分钟上手谷歌云GCP核心云开发技能 - 搭建和维护高可用数据库集群
  • 【JavaScript】数组四大方法命名 得push pop shift unshift的原因 和功能
  • cookie与session的区别+springboot使用
  • i2c讲解以及zyqn中的使用
  • vue的diff算法的【双端比较】策略
  • C++中如果函数a的参数是class v,class z是v的子类,可否将z的对象当参数传给函数a,可以
  • SystemUI plugin 开发
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【刷算法】求1+2+3+...+n
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • CentOS6 编译安装 redis-3.2.3
  • HTTP 简介
  • Java 网络编程(2):UDP 的使用
  • Laravel Telescope:优雅的应用调试工具
  • RxJS: 简单入门
  • Spring框架之我见(三)——IOC、AOP
  • ucore操作系统实验笔记 - 重新理解中断
  • 浅谈Golang中select的用法
  • ​如何防止网络攻击?
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • # include “ “ 和 # include < >两者的区别
  • #Linux(权限管理)
  • #Ubuntu(修改root信息)
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (C语言)fgets与fputs函数详解
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (分布式缓存)Redis持久化
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (九十四)函数和二维数组
  • (亲测有效)推荐2024最新的免费漫画软件app,无广告,聚合全网资源!
  • (十七)Flink 容错机制
  • (转)Scala的“=”符号简介
  • (转)机器学习的数学基础(1)--Dirichlet分布
  • .JPG图片,各种压缩率下的文件尺寸
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .net 调用php,php 调用.net com组件 --
  • .NET/C# 的字符串暂存池
  • ?php echo ?,?php echo Hello world!;?
  • @Autowired 和 @Resource 区别的补充说明与示例
  • @Autowired多个相同类型bean装配问题
  • [145] 二叉树的后序遍历 js
  • [ABC275A] Find Takahashi 题解
  • [Android]Android P(9) WIFI学习笔记 - 扫描 (1)
  • [CC2642R1][VSCODE+Embedded IDE+IAR Build+Cortex-Debug] TI CC2642R1基于VsCode的开发环境
  • [CC-FNCS]Chef and Churu