100盏灯经过一系列操作后最后还有多少盏灯亮着(百度的一道笔试题)

2023-12-03 04:18

本文主要是介绍100盏灯经过一系列操作后最后还有多少盏灯亮着(百度的一道笔试题),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今年百度的一道笔试题:有100盏灯(它们的位置编号为1, 2 .. 99,100),刚开始全都是灭着的。第一次把所有的灯都打开,第二次把偶数位置上的灯灭了,第三次把位置是3的倍数的灯原来灭的打开,原来打开着的,灭了。第N次把位置是N的倍数的灯原来灭的打开,原来打开着的,灭了。问第100次后还有多少盏灯灭着的?下面我用编程实现这道题在写代码之前我们先分析一下这道题。100盏灯一会儿灭,一会儿亮到底哟什么规律呢?规律就是第N次操作会把位置是N的倍数的灯原来灭着的,打开,原来打开的,灭了。打开,关闭两种状态,可以用一个变量或者一个二进制位来表示,100盏灯可以用一个大小为100的整型数组或者100个二进制位来表示状态。下面我就用100个二进制位来实现算法。 ps:带有注释的代码是同一个函数的不同实现

#include "iostream"
using namespace std;
#include "memory.h"
#define BYTESIZE 8
#define LAMPNUM 100void setBitsByRules(char* pBuffer, int rules, const int bufferlen){ // 宏不能作为形参for (int i = 1; i < bufferlen+1; i++){if (i % rules == 0){// 按位取反*pBuffer = *pBuffer ^ (0x01 <<((i-1)%8));}if (i%8==0) {pBuffer++;}}}

int  checkBits(char* pBuffer, int n){int count = 0; // 记录有多少个位的值是1for (int i = 0; i < 100; i++){// 判断某位是不是为1if ((int)((  (*pBuffer) & ( (0x01) << (i%8)  ) )) != 0){count++;cout << (i+1) << "亮 ";}else {//	cout << (i+1) << "灭 "; // 测试语句}// 注意应该是if ((i+1)%8 == 0) 而不是if (i%8 == 0)下标是从0开始的// 所以当8的倍数减1就要使pBuffer的下表自增1if ((i+1)%8 == 0) {pBuffer++;}}return count;
}
void main(){
    // N个二进制位共需要多少个个字节(必须是整数)int bufferlen = 0;if (LAMPNUM%BYTESIZE == 0){bufferlen = LAMPNUM/BYTESIZE;} else {bufferlen = LAMPNUM/BYTESIZE + 1;}char* pBuffer = new char[bufferlen];// 初始时让所有的位都置0memset(pBuffer, 0, bufferlen);for (int i = 1; i < LAMPNUM+1; i++){setBitsByRules(pBuffer, i,  LAMPNUM);		}int count = 0;// 检查有多少位是1即有多少盏灯是亮着的count = checkBits(pBuffer, LAMPNUM);cout << "最终有" << count << "盏灯亮着!" << endl;delete[] pBuffer;}


这篇关于100盏灯经过一系列操作后最后还有多少盏灯亮着(百度的一道笔试题)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

动手学深度学习【数据操作+数据预处理】

import osos.makedirs(os.path.join('.', 'data'), exist_ok=True)data_file = os.path.join('.', 'data', 'house_tiny.csv')with open(data_file, 'w') as f:f.write('NumRooms,Alley,Price\n') # 列名f.write('NA

线程的四种操作

所属专栏:Java学习        1. 线程的开启 start和run的区别: run:描述了线程要执行的任务,也可以称为线程的入口 start:调用系统函数,真正的在系统内核中创建线程(创建PCB,加入到链表中),此处的start会根据不同的系统,分别调用不同的api,创建好之后的线程,再单独去执行run(所以说,start的本质是调用系统api,系统的api

Java IO 操作——个人理解

之前一直Java的IO操作一知半解。今天看到一个便文章觉得很有道理( 原文章),记录一下。 首先,理解Java的IO操作到底操作的什么内容,过程又是怎么样子。          数据来源的操作: 来源有文件,网络数据。使用File类和Sockets等。这里操作的是数据本身,1,0结构。    File file = new File("path");   字

MySQL——表操作

目录 一、创建表 二、查看表 2.1 查看表中某成员的数据 2.2 查看整个表中的表成员 2.3 查看创建表时的句柄 三、修改表 alter 3.1 重命名 rename 3.2 新增一列 add 3.3 更改列属性 modify 3.4 更改列名称 change 3.5 删除某列 上一篇博客介绍了库的操作,接下来来看一下表的相关操作。 一、创建表 create

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

封装MySQL操作时Where条件语句的组织

在对数据库进行封装的过程中,条件语句应该是相对难以处理的,毕竟条件语句太过于多样性。 条件语句大致分为以下几种: 1、单一条件,比如:where id = 1; 2、多个条件,相互间关系统一。比如:where id > 10 and age > 20 and score < 60; 3、多个条件,相互间关系不统一。比如:where (id > 10 OR age > 20) AND sco

PHP7扩展开发之流操作

前言 啥是流操作?简单来讲就是对一些文件,网络的IO操作。PHP已经把这些IO操作,封装成流操作。这节,我们将使用PHP扩展实现一个目录遍历的功能。PHP示例代码如下: <?phpfunction list_dir($dir) {if (is_dir($dir) === false) {return;} $dh = opendir($dir);if ($dh == false) {ret

浙大数据结构:树的定义与操作

四种遍历 #include<iostream>#include<queue>using namespace std;typedef struct treenode *BinTree;typedef BinTree position;typedef int ElementType;struct treenode{ElementType data;BinTree left;BinTre

浙大数据结构:04-树7 二叉搜索树的操作集

这道题答案都在PPT上,所以先学会再写的话并不难。 1、BinTree Insert( BinTree BST, ElementType X ) 递归实现,小就进左子树,大就进右子树。 为空就新建结点插入。 BinTree Insert( BinTree BST, ElementType X ){if(!BST){BST=(BinTree)malloc(sizeof(struct TNo