关于2进制思想的趣味题。

2024-06-17 14:48
文章标签 思想 进制 趣味

本文主要是介绍关于2进制思想的趣味题。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.有一条金条,一个人给一个老板打工7天,每天给那人金条的七分之一,把金条最少切几次才可按时将工资发放?

2.现有1000个苹果,10个盒子,现在要你将1000个苹果装入10个盒子中,使得用户无论购买多少个苹果(1-1000),都能由若干个盒子拼装而成(卖的时候是整个盒子卖,不能拆盒子的包装)
怎么装??

3.有1000瓶液体,无色无味,外表完全一样,其中一瓶是毒药,有10条警犬,警犬喝过毒药后两小时后死亡。问,如何在两个小时后确定哪瓶是毒药。

4.如何仅使用4个砝码,称出40克以内(及40克)的重量的物体。


1、分析:

     最少只需切割2下,分别切出1/7,2/7和4/7的三块。
     因为要将金条切割成最少几份,来分别给工人的7天的工资按时发工资。所以可以将问题转化为:“选择最少几个数,可以表示1到7的7个数的问题”。
     首先,第一天的工资,必须要切割出1/7块来发工资。
     然后,第二天时候,有两种切法来发工资,一种是再切1/7,一种是切2/7通过交换第一天的1/7来实现发放工资的效果。此时,考虑使用第二种时,第三天无须进行切割,便可完成所有交换,达到最佳效果。Ps:若采用第一种,第三天是必须要进行切割。
     通过第二种方法,第三天只需把1/7块支付即可。
     第四天,使用4/7交换工人手中的1/7和2/7。
     第五天,再给1/7。
     第六天,使用2/7交换1/7。
     第七天,给出1/7完成交付。

2、分析:

     可以将1000个苹果以1,2,4,8,16,32,64,128,256,489。
     1000个苹果分装在10个盒子里实现用户无论要买多少个,均可直接获取其中几个盒子达到目的。可以将其转化为“十个数的组合使其可以表示1000以内的任意一个数”。
     可以发现1000约等于1024,而使用
     00000 00001
     00000 00010
     00000 00100
     00000 01000
     00000 10000
     00001 00000
     00010 00000
     00100 00000
     01000 00000
     10000 00000
的十个数的组合即可表示1023以内的任意数字。而由于只有1000个苹果,且只需表示1000以内的数字,所以最后一个数及取512 - 32 = 489个。这时前九个盒子可表示511以内任意一个数,和489组合,即可实现1000以内任意数字的表示。

3、分析:

     因为要通过10只警犬,区分出1000瓶中的唯一一瓶毒药。
     首先,假想10只警犬即十个二进制位,可以表示两个值,两种状态。则,可以演化出2^10 = 1024种状态。
     然后,对1000瓶药水进行编号。
     从00000 00001
     00000 00011
      .....
     11111 01000
     总共1000个编号。对警犬1喂最后一位为1的药水,对警犬2位倒数第二位为1的的药水.....对警犬十喂倒数第十位为1的药水。
     此时根据警犬的状态,可判断药水是否有毒。
如:
     当警犬1死,其余不死时,判断00000 00001有毒。
     当警犬2死,其余不死时,判断00000 00010有毒。
总结:  
     即,几号警犬死亡,则对应位为1,其余位为0的标签药水有毒。

4、分析:

    首先,根据二进制的思想,但使用1、2、4、8只能称出15以内质量的物体。再累似二进制思想。2克可以使用左边3克,右边1克的方法实现2克的重量称量。故1克、3克可实现4克以内的称量,下一个使用9克可实现14克以内的称量。再加一个27,即可实现40以内的所有质量的称量。


总结:这些题都是使用尽量少的数表示最多的数。在不能使用减法时,最优的解法是采用二进制的方式。如第二和第三题。

           当可使用减法时,最优解为三进制方式,如第一题和第四题。

这篇关于关于2进制思想的趣味题。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

usaco 1.2 Palindromic Squares(进制转化)

考察进制转化 注意一些细节就可以了 直接上代码: /*ID: who jayLANG: C++TASK: palsquare*/#include<stdio.h>int x[20],xlen,y[20],ylen,B;void change(int n){int m;m=n;xlen=0;while(m){x[++xlen]=m%B;m/=B;}m=n*n;ylen=0;whi

uva 10061 How many zero's and how many digits ?(不同进制阶乘末尾几个0)+poj 1401

题意是求在base进制下的 n!的结果有几位数,末尾有几个0。 想起刚开始的时候做的一道10进制下的n阶乘末尾有几个零,以及之前有做过的一道n阶乘的位数。 当时都是在10进制下的。 10进制下的做法是: 1. n阶位数:直接 lg(n!)就是得数的位数。 2. n阶末尾0的个数:由于2 * 5 将会在得数中以0的形式存在,所以计算2或者计算5,由于因子中出现5必然出现2,所以直接一

函数式编程思想

我们经常会用到各种各样的编程思想,例如面向过程、面向对象。不过笔者在该博客简单介绍一下函数式编程思想. 如果对函数式编程思想进行概括,就是f(x) = na(x) , y=uf(x)…至于其他的编程思想,可能是y=a(x)+b(x)+c(x)…,也有可能是y=f(x)=f(x)/a + f(x)/b+f(x)/c… 面向过程的指令式编程 面向过程,简单理解就是y=a(x)+b(x)+c(x)

实例demo理解面向接口思想

浅显的理解面向接口编程 Android开发的语言是java,至少目前是,所以理解面向接口的思想是有必要的。下面通过一个简单的例子来理解。具体的概括我也不知道怎么说。 例子: 现在我们要开发一个应用,模拟移动存储设备的读写,即计算机与U盘、MP3、移动硬盘等设备进行数据交换。已知要实现U盘、MP3播放器、移动硬盘三种移动存储设备,要求计算机能同这三种设备进行数据交换,并且以后可能会有新的第三方的

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(4)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)-CSDN博客  这节就是真正的存储数据了   理清一下思路: 1.存储路径并检查 //2进制文件类存储private static string Data_Binary_Pa

Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(3)

本文仅作笔记学习和分享,不用做任何商业用途 本文包括但不限于unity官方手册,unity唐老狮等教程知识,如有不足还请斧正​​ Unity数据持久化 之 一个通过2进制读取Excel并存储的轮子(2) (*****生成数据结构类的方式特别有趣****)-CSDN博客 做完了数据结构类,该做一个存储类了,也就是生成一个字典类(只是声明)  实现和上一节的数据结构类的方式大同小异,所

itoa()函数,10进制转换到(2~36)进制

先看下itoa()的函数说明吧: 功 能:把一整数转换为字符串   用 法:char *itoa(int value, char *string, int radix);    详细解释:itoa是英文integer to array(将int整型数转化为一个字符串,并将值保存在数组string中)的缩写.    参数:  value: 待转化的整数。            radix:

【Java编程思想】线程的基本协作机制 与 线程的中断

wait/notify Java在Object类中定义了一些线程协作的基本方法,wait和notify public final void wait() throws InterruptedException;public final native void wait(long timeout) throws InterruptedException; 一个带时间参数,单位是毫秒,表示最

【Java编程的思想】理解synchronized

用法和基本原理 synchronized可以用于修饰类的实例方法、静态方法和代码块 实例方法 在介绍并发基础知识的时候,有一部分是关于竞态条件的,当多个线程访问和操作同一个对象时,由于语句不是原子操作,所以得到了不正确的结果。这个地方就可以用synchronized进行处理 public class Counter {private int count;public synchroni