从1到7中选择三个数,出现两个重复性计算公式的机率是多少,怎么计算的?急,谢谢

1-36 数字.任意选7个.每次只能出现1次.每个数出现机率是多少?不放回_作业帮
拍照搜题,秒出答案
1-36 数字.任意选7个.每次只能出现1次.每个数出现机率是多少?不放回
1-36 数字.任意选7个.每次只能出现1次.每个数出现机率是多少?不放回
用1-不出现该数的概率.即 1- 35/36 * 34/35 * 33/34 * 32/33 * 31/32 * 30/31 * 29/30=7/36还有另一种想法,就是这个数在7个数里面还是另外29个数里面.所以概率是7/36.从1,2,……9这九个数中,随机抽取3个不同的数,则这3个数的和为偶数的概率是_百度知道
从1,2,……9这九个数中,随机抽取3个不同的数,则这3个数的和为偶数的概率是
不能用排列组合求 还没学
怎么算这个题
提问者采纳
只有两种可能性,要不就是3个偶数相加,要不就是2个奇数加1个偶数偶数有2,4,6,8奇数有1,3,5,7,93个偶数相加有246,248,268,468共4种2个奇数加1个偶数有132,134,136,138,152,154,156,158,172,174哗搐糕诽蕹赌革涩宫绩,176,178,192,194,196,198,352,354,356,358,372,374,376,378,392,394,396,398,572,574,576,578,592,594,596,598,792,794,796,798共40种可能的结果有40+4=44种,总的结果有123,124,125,126,127,128,129.。。。。。28+21+15+10+6+3+1=84种概率为44/84=11/21
结果是这个
但是不能考试的时候一个一个的都写出来吧
漏掉了不说 时间也来不及啊
除了用组合的形式
没别的办法了吗
这样的题型就是组合题啊,我是看你说非要不用,我才用最最最普通的方法告诉你的。你自己可以简化啊,到你能驾驭的地步
来自团队:
其他类似问题
为您推荐:
其他7条回答
不用排列组合是吧
思路:因为偶数相加本身就是偶数,奇数相加也是偶数,奇数加偶数是奇数,所以其实只在乎抽出的数是奇数还是偶数,无所谓到底是几。一个有5个奇数4个偶数。
计算方法:
和为偶数只有两种可能:
1.抽出三个都是偶数。先抽第一个偶数,9个数中4个偶数,所以概率是4/9。再抽第二个偶数,8个数中3个偶数,所以是3/8,再抽第三个,2/7。乘起来是总概率,即(4*3*2)/(9*8*7)。
2.抽出三个中有两个是奇数,另外一个是偶数,有奇奇偶,奇偶奇,偶奇奇三种可能。三种可能是对等的,所以只考虑一种“奇奇偶”的情况。
奇奇偶:先抽第一个奇数,概率5/9。再抽第二个奇数,概率4/8。再抽第三个偶数(7个数中有4个偶数),概率为4/7,乘起来是5*4*4/(9*8*7)。
上面说了有三种可能,所以再乘以3.
将1和2的概...
排列组合只是一种算法,没学完全没关系,你知道这种算法怎么计算的就行了,符号本身一点都不重要(应试除外)。
3个数的和是偶数,可能的情况只有两种:1.三个数都是偶数;2.两个奇数一个偶数
第一种情况,三个都是偶数,且个位十位百位各不相同。从个位开始看的话,个位有2,4,6,8四种选择,相应的十位有三种选择,百位有两种选择,总共有4*3*2种取法;
第二种情况,两个奇数一个偶数,假设偶数在个位,有2,4,6,8四种选择,十位有1,3,5,7,9五种选择,百位相应的有四种选择;另外,如果偶数在十位或者百位,取法和个位的相同。所以两个奇数一个偶数的取法有(4*5*4)*3种取法;
上述两种情况总共有4*3*2+(4*5*4)*3种取法,即24+240=264种取法。
而1到9随机取一个各位不相同的三位数,总共有9*8*7=50...
(⊙o⊙)…麻烦确认下最佳答案~~~楼下的不对,即使你把123,321这些当做同种样本,那么分母也不应该是504,重复的一样要排除。另外,题目是说数字,123和321当然是不同的。
第一次选 有9种可能,第二次由于需要不同,所以有8种可能,第三次七种,总共有9*8*7=504种,其中三个数的和为偶数有两种可能,二个奇数、一个偶数;三个偶数三个偶数的话 2、4、6;2、4、8;2、6、8;4、6、8四种可能。二个奇数、一个偶数的话,先取二个奇数,有1、3;1、5;1、7;1、9;3、5;3、7;3、9;5、7;5、9;7、9十种可能,使用可能在2、4、6、8中随便选一个,则10*4种可能,那么共有40+4=44中偶数和,概率为44/504=8.7%
尽管不能用排列组合,你也要明白概率的基本思想
A={随机抽取3个不同的数}-------样本空间
B={和为偶数的3个数}-------满足特殊条件的3个数
很明显,A和B 都是一些集合,比如123 这是三个数,他是A中的元素,也是B中的元素,因为1+2+3=6是偶数,他满足B的条件;1234 不是A中元素,因为此时有四位数,不满足条件,更不可能是B中的元素。135是A中的元素,但不是B中元素,明白是因为1+3+5=9是奇数,不满足B的条件。
概率=# of B除以# of A
A 中元素的个数为 9*8*7=504
因为第一个数有9中选择,然后第二个数就只剩下 8中选择,第三个数只剩下7中选择,这个时候我们有乘法,表示三个数选择完毕。
B中是A 中的某些特殊 3个数。。。偶数=(2,4,6,8).。。奇数={1,3,5,7,9}
0个奇数,偶偶偶--------和为偶
9*8*7/3!=844*3*2/3!=45*4*4/2!=40(4+40)/84=0.52不好意思,忘了举个例子 123=132=213=231=312=321 这些事同样的能明白为什么要处以这些数码?
抽3个数的所有可能数为:9×8×7=504,即抽第一个数有9种可能,第二个数有8种可能,第三个数有7种可能。三个数的和为偶数有两种情况:(1)三个数都为偶数,可能数为4×3×2=24(因为一共有4个偶数);(2)一个为偶数,两个为奇数,可能数为5×4×4=80总概率为(24+80)/504
你这个好像和结果不太一样
喵~我忘了排列的情况~抽3个数的所有可能数为:9×8×7/6=84,即抽第一个数有9种可能,第二个数有8种可能,第三个数有7种可能;而抽出的数的排列次序有6种,如123、132、213、231、312、321,其实这是同一种情况。三个数的和为偶数有两种情况:(1)三个数都为偶数,可能数为4×3×2/6=4(因为一共有4个偶数);(2)一个为偶数,两个为奇数,可能数为5×4×4/2=40(因为已经分奇偶考虑,5是从5个奇数中抽出的,不会与抽出的偶数有不同排列)总概率为(4+40)/84=11/21
偶偶偶,偶奇奇,奇偶奇,奇奇偶(4×3×2+4×5×4+5×4×4+5×4×4)/9×8×7=11/21
没太看明白
高手能说的明白一些吗
怎么得出上面的式子的 谢谢
偶加偶加偶为偶数,偶加奇加奇为偶数,奇加偶加奇为偶数,奇加奇加偶为偶数。所以是(4×3×2+4×5×4+5×4×4+5×4×4)/9×8×7=11/21 .............................................................................................................................................................................................................................................................................
随机抽取的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求:双色球号码一注【从1-33中选择6位个数不能重复★再从1-16中选择1个数】共7个数,谢谢_百度知道
求:双色球号码一注【从1-33中选择6位个数不能重复★再从1-16中选择1个数】共7个数,谢谢
求:双色球号码一注【从1-33中选择6位个数不能重复★再从1-16中选择1个数】共7个数,谢谢!各路大神
是你的跑不掉。不是你的家产败光了都不中,怎么想就怎么买。
其他类似问题
为您推荐:
其他1条回答
你是在这积人品吗?好吧~机选!不解释
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在1至49个号码随机在其中选出7个号码,那1号2号3号4号的任何一个数出在被选出的7个号里的机率是多_作业帮
拍照搜题,秒出答案
在1至49个号码随机在其中选出7个号码,那1号2号3号4号的任何一个数出在被选出的7个号里的机率是多
在1至49个号码随机在其中选出7个号码,那1号2号3号4号的任何一个数出在被选出的7个号里的机率是多
“1号2号3号4号的任何一个数出在被选出的7个号里”的反面情况就是“1号2号3号4号的任何一个数都没有出在被选出的7个号里”,其机率为:(48/49)的4×7次方因此,1号2号3号4号的任何一个数出在被选出的7个号里的机率是:1-(48/49)的28次方(大约在50%至60%之间)
在1至49个号码随机在其中选出7个号码的可能性49^7,这四个数不在的有45^7所以机率为1-(45/49)^7
1,2,3,4都出现等价于在剩下的45各种选三个。故P(A)=(C(45)(3))/(C(49)(7))
=5/30268 C(m)(n),m在下,n在上计算方法详见百科,排列组合
数学问题:在1至49个号码随机在其中选出7个号码,那1号2号3号4号的任何一个数出在被选出的7个号里的机率是多少?只要出任何一个。谢谢用1-(4个号码全不出现的概率)
5个都不出现 等价于令外的45个之中出现7个
=1-C((45)(7)/C(49)
算法同上=...当前访客身份:游客 [
Don&t let the noise of other&s opinions drown out your own inner voice. And most important, have the courage to follo...
:''.replace(/(\d{1,3})(?=(\d{3})+$)/g...
:引用来自“Mr.Zheng”的评论''.replace...
:''.split("").reverse().join("").repl...
:''.replace(/\B(?=(\d{3})+$)/g,','); ...
:引用来自“yaray”的评论parseInt(值, 进制), 如...
:parseInt(值, 进制), 如 parseInt("0111", 10), ...
:第一想法动态规划貌似不行,s(i, j) = max { s(i...
:尾递归为不需要保存栈,跟for while循环性能差不...
:rev([A|B],ACC)-&rev(B,[A|ACC]); rev([],ACC)-&...
:%% Erlang 逆序函数 rev([A|[B|Rest]])-&
今日访问:16
昨日访问:24
本周访问:236
本月访问:157
所有访问:17029
列表模式: |
症状: 开机显示:GRUB loading error:unknow filesystem grub rescue& 原因: 已经发现下面几种操作会导致这种问题: 1,想删除ubuntu,于是直接在windows下删除/格式化了ubuntu所在的分区。 2,调整磁盘,利用工具合并/分割/调整/删除分区,使磁盘分区数目发生了变化。 3,重新安装系统,把linux安装到了新分区,原有分区已经格式化,但是没有重新安装grub2。 4,用ubuntu备份工具/衍生版制造工具等,把主分区回复成了8.X的老版本,结果老版本的grub是grub1,于是把grub2破坏掉了。
总归,是由于操作者不知道grub2分为两部分,一部分(一般情况下)写在了mbr上,另一部分写在了某个分区的/boot/grub目录(如果/boot单独分区,则直接写在对应分区的/grub目录)里面。由于上述操作,致使grub2的mbr里面的那一部分找不到/grub目录里面的那一部分了(或者那一部分已经删除了)。
思路: 方法1,彻底删除grub2,让这个提示不再出现: 适用于已经不想再使用ubuntu,要转回windows的人。 这个很简单,只要你有Windows启动盘(非Ghost),用它启动,至选择安装位置,不用真正安装,退出重启就可以。 或者用它启动到故障修复台,运行fixboot或者fixmbr都可以。 win7命令行下,则是执行:BootRec.exe /fixmbr (/fixmbr修复mbr, /FixBoot修复启动扇区,/ScanOs检测已安装的win7,/RebuildBcd重建bcd。)
方法2,重新安装、修复grub2 1. 先使用ls命令,找到Ubuntu的安装在哪个分区: 在 grub rescue&下输入以下命令:
会罗列所有的磁盘分区信息,比方说:
(hd0,1),(hd0,5),(hd0,3),(hd0,2)
2. 然后依次调用如下命令: X表示各个分区号码 如果/boot没有单独分区,用以下命令:
ls (hd0,X)/boot/grub
如果/boot单独分区,则用下列命令:
ls (hd0,X)/grub
正常情况下,会列出来几百个文件,很多文件的扩展名是.mod和.lst和.img,还有一个文件是grub.cfg。假设找到(hd0,5)时,显示了文件夹中的文件,则表示Linux安装在这个分区。
4,如果找到了正确的grub目录,则设法临时性将grub的两部分关联起来,方法如下: 以下是/boot没有单独分区的命令:
grub rescue&set root=(hd0,5) grub rescue&set prefix=(hd0,5)/boot/grub grub rescue&insmod /boot/grub/normal.mod
以下是/boot 单独分区的命令:(这几句有待验证)
grub rescue&set root=(hd0,5)
grub rescue&set prefix=(hd0,5)/grub grub rescue&insmod /grub/normal.mod
然后调用如下命令,就可以显示出丢失的grub菜单了。 grub rescue&normal 不过不要高兴,如果这时重启,问题依旧存在,我们需要进入Linux中,对grub进行修复。 启动起来,进入ubuntu之后,在终端执行:
& & sudo update-grub & & sudo grub-install /dev/sda
(sda是你的硬盘号码,千万不要指定分区号码,例如sda1,sda5等都不对) 重启测试是否已经恢复了grub的启动菜单? 恭喜你恢复成功! 5,如果找不到正确的/grub目录,比如第3、4种误操作,则尝试寻找是否有linux核心文件,则依次调用如下命令: X表示各个分区号码: grub rescue&下,输入: 如果/boot没有单独分区:
ls (hd0,X)/boot
如果/boot单独分区,则:
ls (hd0,X)
找名字类似与vmlinuz-3.0.0-12-generic这样的文件,这是linux核心文件,如果找到,记下(hd0,X)中的X值。假设找到(hd0,5)时,显示了文件夹中的文件。
然后用live cd 或者 live usb启动,在live cd的ubuntu的终端中依次输入以下命令(sda5中的“5”必须改成上面记录下来数值)(这两句需要验证): 如果/boot没有单独分区:
sudo mount /dev/sda5 /mnt sudo grub-install --boot-directory=/mnt/boot /dev/sda
如果/boot单独分区,则:
sudo mount /dev/sda5 /mnt sudo grub-install --boot-directory=/mnt /dev/sda
然后重新启动即可。
(以上这两句命令也可以解决安装ubuntu时grub安装位置不对,没有将grub安装到/dev/sda,造成启动时不出现ubuntu启动项直接进入windows的问题,不过需要自行确定sda5中的“5”改成什么数字。) 6,如果连linux核心文件都没有,那么,彻底重新安装吧。
没什么难度,只是准备工作稍微麻烦了一点,你需要一个启动U盘或者光盘。
&用U盘直接启动(改变系统引导顺序,使之先从U盘开始引导),在U盘上运行,打开终端,输入以下内容:
(下面是基于debian的系统(其实就是普通个人电脑的系统),其他系统自己转换命令)
sudo apt-get install lilo
sudo lilo -M /dev/sda mbr
&& & lilo是一种以前的组件,现在基本上已经被放弃了,大部分系统采用的都是grub引导,通过lilo就可以的正常引导了。
我的问题及解决:我是直接格式化linux安装盘导致进入时出现grub rescue&,用三种方法解决了问题,所以删除系统的时候还是得按照规矩来啊
以上为碰到问题到处百度后的各方答案的总结,本人只验证了第三种方法的正确性
发布于 2年前,
阅读(572) | 评论(0) |
投票(0) | 收藏(1)
find命令的一般格式: & & find pathname -options [-exec] & & pathname&&是find命令所查找的目录路径 & & -exec& &&&对匹配的文件执行该参数所给出的shell命令&&&
-options 选项参数: & & -name 按照文件名查找文件 & & -perm 按照文件权限来查找文件 & & -user 按照文件属主来查找文件 & & -group 按照文件所属组来查找文件 & & -mtime -n +n 按照文件的更改时间来查找文件,-n 表示n天以内,+n 表示n天前 & & -nogroup 查找无属组的文件 & & -nouser 查找无属主的文件 & & -type 查找某一类型的文件: & && && & b 块设备文件 & && && & d 目录 & && && & c 字符设备文件 & && && & p 管道文件 & && && & l 符号链接文件 & && && & f 普通文件
&& -iregex 忽略大小写的正则表达式 &&-regex 正则表达式
1、使用-name选项
例(1)在当前目录及子目录下查找所有“.log”文件 & &&&$find . -name “*.log” & & (2)在当前目录及子目录下查找所有以大写字母开头的文件 & &&&$find . -name “[A-Z]*” 2、使用-perm选现
该选项用来查找那些指定权限的文件 例:查找当前目录及子目录下所有文件权限为755的文件 & & $find . -perm 755
3、使用-mtime选项
按照文件的修改时间来查找 例:(1)在当前目录下查找1天内修改过的文件 & && &$find&. -mtime -1 &&& (2)在当前目录中查找1天前修改过的文件 & && &$find . -mtime +1 4、使用exec来执行shell命令
格式要求: -exec 选项后面跟随着所要执行的命令,然后是一对{}一个空格和一个/,最后是一个分号。 例:在用户主目录下查找修改时间在3天前的“.txt”文件并删除 &&& $find . -mtime +3 -name “*.txt” -exec rm {} /;
5、使用正则表达式 $find . -iregex &.*/.txt& 当前位置查找后缀为.txt的文件
发布于 2年前,
阅读(16) | 评论(0) |
投票(0) | 收藏(1)
【IT168 资讯】Hadoop streaming是Hadoop的一个工具, 它帮助用户创建和运行一类特殊的map/reduce作业, 这些特殊的map/reduce作业是由一些可执行文件或脚本文件充当mapper或者reducer。例如:&
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper /bin/cat \ -reducer /bin/wc
Streaming工作原理
在上面的例子里,mapper和reducer都是可执行文件,它们从标准输入读入数据(一行一行读),并把计算结果发给标准输出。Streaming工具会创建一个Map/Reduce作业,并把它发送给合适的集群,同时监视这个作业的整个执行过程。
如 果一个可执行文件被用于mapper,则在mapper初始化时,每一个mapper任务会把这个可执行文件作为一个单独的进程启动。 mapper任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。同时,mapper收集可执行文件进程标准输出的内容,并把收到的 每一行内容转化成key/value对,作为mapper的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为 value。如果没有tab,整行作为key值,value值为null。不过,这可以定制,在下文中将会讨论如何自定义key和value的切分方式。
如 果一个可执行文件被用于reducer,每个reducer任务会把这个可执行文件作为一个单独的进程启动。 Reducer任务运行时,它把输入切分成行并把每一行提供给可执行文件进程的标准输入。同时,reducer收集可执行文件进程标准输出的内容,并把每 一行内容转化成key/value对,作为reducer的输出。默认情况下,一行中第一个tab之前的部分作为key,之后的(不包括tab)作为 value。在下文中将会讨论如何自定义key和value的切分方式。
这是Map/Reduce框架和streaming mapper/reducer之间的基本协议。
用户也可以使用java类作为mapper或者reducer。上面的例子与这里的代码等价:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper org.apache.hadoop.mapred.lib.IdentityMapper \ -reducer /bin/wc 用户可以设定stream.non.zero.exit.is.failure true 或false 来表明streaming task的返回值非零时是 Failure 还是Success。默认情况,streaming task返回非零时表示失败。
将文件打包到提交的作业中
任何可执行文件都可以被指定为mapper/reducer。这些可执行文件不需要事先存放在集群上;如果在集群上还没有,则需要用-file选项让framework把可执行文件作为作业的一部分,一起打包提交。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper myPythonScript.py \ -reducer /bin/wc \ -file myPythonScript.py
上面的例子描述了一个用户把可执行python文件作为mapper。其中的选项“-file myPythonScirpt.py”使可执行python文件作为作业提交的一部分被上传到集群的机器上。
除了可执行文件外,其他mapper或reducer需要用到的辅助文件(比如字典,配置文件等)也可以用这种方式打包上传。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper myPythonScript.py \ -reducer /bin/wc \ -file myPythonScript.py \ -file myDictionary.txt Streaming选项与用法 只使用Mapper的作业 有时只需要map函数处理输入数据。这时只需把mapred.reduce.tasks设置为零,Map/reduce框架就不会创建reducer任务,mapper任务的输出就是整个作业的最终输出。
为了做到向下兼容,Hadoop Streaming也支持“-reduce None”选项,它与“-jobconf mapred.reduce.tasks=0”等价。
为作业指定其他插件
和其他普通的Map/Reduce作业一样,用户可以为streaming作业指定其他插件:
-inputformat JavaClassName -outputformat JavaClassName -partitioner JavaClassName -combiner JavaClassName 用 于处理输入格式的类要能返回Text类型的key/value对。如果不指定输入格式,则默认会使用TextInputFormat。因为 TextInputFormat得到的key值是LongWritable类型的(其实key值并不是输入文件中的内容,而是value偏移量),所以 key会被丢弃,只把value用管道方式发给mapper。
用户提供的定义输出格式的类需要能够处理Text类型的key/value对。如果不指定输出格式,则默认会使用TextOutputFormat类。
Hadoop Streaming中的大文件和档案 任 务使用-cacheFile和-cacheArchive选项在集群中分发文件和档案,选项的参数是用户已上传至HDFS的文件或档案的URI。这些文件 和档案在不同的作业间缓存。用户可以通过fs.default.name.config配置参数的值得到文件所在的host和fs_port。
这个是使用-cacheFile选项的例子:
-cacheFile hdfs://host:fs_port/user/testfile.txt#testlink 在上面的例子里,url中#后面的部分是建立在任务当前工作目录下的符号链接的名字。这里的任务的当前工作目录下有一个“testlink”符号链接,它指向testfile.txt文件在本地的拷贝。如果有多个文件,选项可以写成:
-cacheFile hdfs://host:fs_port/user/testfile1.txt#testlink1 -cacheFile hdfs://host:fs_port/user/testfile2.txt#testlink2 -cacheArchive选项用于把jar文件拷贝到任务当前工作目录并自动把jar文件解压缩。例如:
-cacheArchive hdfs://host:fs_port/user/testfile.jar#testlink3 在上面的例子中,testlink3是当前工作目录下的符号链接,它指向testfile.jar解压后的目录。
下 面是使用-cacheArchive选项的另一个例子。其中,input.txt文件有两行内容,分别是两个文件的名 字:testlink/cache.txt和testlink/cache2.txt。“testlink”是指向档案目录(jar文件解压后的目录)的 符号链接,这个目录下有“cache.txt”和“cache2.txt”两个文件。
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input &/user/me/samples/cachefile/input.txt& \ -mapper &xargs cat& \ -reducer &cat& \ -output &/user/me/samples/cachefile/out& \
-cacheArchive 'hdfs://hadoop-/user/me/samples/cachefile/cachedir.jar#testlink' \
-jobconf mapred.map.tasks=1 \ -jobconf mapred.reduce.tasks=1 \
-jobconf mapred.job.name=&Experiment&
$ ls test_jar/ cache.txt cache2.txt
$ jar cvf cachedir.jar -C test_jar/ . added manifest adding: cache.txt(in = 30) (out= 29)(deflated 3%) adding: cache2.txt(in = 37) (out= 35)(deflated 5%)
$ hadoop dfs -put cachedir.jar samples/cachefile
$ hadoop dfs -cat /user/me/samples/cachefile/input.txt testlink/cache.txt testlink/cache2.txt
$ cat test_jar/cache.txt
This is just the cache string
$ cat test_jar/cache2.txt
This is just the second cache string
$ hadoop dfs -ls /user/me/samples/cachefile/out
Found 1 items /user/me/samples/cachefile/out/part-00000 &r 3& 69
$ hadoop dfs -cat /user/me/samples/cachefile/out/part-00000 This is just the cache string
This is just the second cache string
为作业指定附加配置参数
用户可以使用“-jobconf &n&=&v&”增加一些配置变量。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper org.apache.hadoop.mapred.lib.IdentityMapper\ -reducer /bin/wc \ -jobconf mapred.reduce.tasks=2 上面的例子中,-jobconf mapred.reduce.tasks=2表明用两个reducer完成作业。
关于jobconf参数的更多细节可以参考:hadoop-default.html
Streaming 作业的其他选项如下表:
选项 可选/必须 描述
-cluster name 可选 在本地Hadoop集群与一个或多个远程集群间切换
-dfs host:port or local 可选 覆盖作业的HDFS配置
-jt host:port or local 可选 覆盖作业的JobTracker配置
-additionalconfspec specfile 可选 用一个类似于hadoop-site.xml的XML文件保存所有配置,从而不需要用多个&-jobconf name=value&类型的选项单独为每个配置变量赋值
-cmdenv name=value 可选 传递环境变量给streaming命令
-cacheFile fileNameURI 可选 指定一个上传到HDFS的文件
-cacheArchive fileNameURI 可选 指定一个上传到HDFS的jar文件,这个jar文件会被自动解压缩到当前工作目录下
-inputreader JavaClassName 可选 为了向下兼容:指定一个record reader类(而不是input format类)
-verbose 可选 详细输出
使 用-cluster &name&实现“本地”Hadoop和一个或多个远程Hadoop集群间切换。默认情况下,使用hadoop-default.xml和 hadoop-site.xml;当使用-cluster &name&选项时,会使用$HADOOP_HOME/conf/hadoop-&name&.xml。
下面的选项改变temp目录:
-jobconf dfs.data.dir=/tmp 下面的选项指定其他本地temp目录:
-jobconf mapred.local.dir=/tmp/local -jobconf mapred.system.dir=/tmp/system -jobconf mapred.temp.dir=/tmp/temp 更多有关jobconf的细节请参考:http://wiki.apache.org/hadoop/JobConfFile
在streaming命令中设置环境变量:
-cmdenv EXAMPLE_DIR=/home/example/dictionaries/ 其他例子 使用自定义的方法切分行来形成Key/Value对 之前已经提到,当Map/Reduce框架从mapper的标准输入读取一行时,它把这一行切分为key/value对。在默认情况下,每行第一个tab符之前的部分作为key,之后的部分作为value(不包括tab符)。
但是,用户可以自定义,可以指定分隔符是其他字符而不是默认的tab符,或者指定在第n(n&=1)个分割符处分割而不是默认的第一个。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper org.apache.hadoop.mapred.lib.IdentityMapper \ -reducer org.apache.hadoop.mapred.lib.IdentityReducer \ -jobconf stream.map.output.field.separator=. \ -jobconf stream.num.map.output.key.fields=4
在 上面的例子,“-jobconf stream.map.output.field.separator=.”指定“.”作为map输出内容的分隔符,并且从在第四个“.”之前的部分作为 key,之后的部分作为value(不包括这第四个“.”)。 如果一行中的“.”少于四个,则整行的内容作为key,value设为空的Text对象(就像这样创建了一个Text:new Text(&&))。
同 样,用户可以使用“-jobconf stream.reduce.output.field.separator=SEP”和“-jobconf stream.num.reduce.output.fields=NUM”来指定reduce输出的行中,第几个分隔符处分割key和value。
一个实用的Partitioner类 (二次排序,-partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner 选项)
Hadoop有一个工具类org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner,它在应用程序中很有用。Map/reduce框架用这个类切分map的输出,切分是基于key值的前缀,而不是整个key。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper org.apache.hadoop.mapred.lib.IdentityMapper \ -reducer org.apache.hadoop.mapred.lib.IdentityReducer \ -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \ -jobconf stream.map.output.field.separator=. \ -jobconf stream.num.map.output.key.fields=4 \ -jobconf map.output.key.field.separator=. \ -jobconf num.key.fields.for.partition=2 \ -jobconf mapred.reduce.tasks=12 其 中,-jobconf stream.map.output.field.separator=. 和-jobconf stream.num.map.output.key.fields=4是前文中的例子。Streaming用这两个变量来得到mapper的 key/value对。
上面的Map/Reduce 作业中map输出的key一般是由“.”分割成的四块。但是因为使用了 -jobconf num.key.fields.for.partition=2 选项,所以Map/Reduce框架使用key的前两块来切分map的输出。其中, -jobconf map.output.key.field.separator=. 指定了这次切分使用的key的分隔符。这样可以保证在所有key/value对中, key值前两个块值相同的所有key被分到一组,分配给一个reducer。
这种高效的方法等价于指定前两块作为主键,后两块作为副键。主键用于切分块,主键和副键的组合用于排序。一个简单的示例如下:
Map的输出(key)
11.12.1.2 11.14.2.3 11.11.4.1 11.12.1.1 11.14.2.2
切分给3个reducer(前两块的值用于切分)
11.11.4.1 ----------- 11.12.1.2 11.12.1.1 ----------- 11.14.2.3 11.14.2.2 在每个切分后的组内排序(四个块的值都用于排序)
11.11.4.1 ----------- 11.12.1.1 11.12.1.2 ----------- 11.14.2.2 11.14.2.3 Hadoop聚合功能包的使用(-reduce aggregate 选项) Hadoop 有一个工具包“Aggregate”( https://svn.apache.org/repos/asf/hadoop/core/trunk/src/java/org/apache /hadoop/mapred/lib/aggregate)。 “Aggregate”提供一个特殊的reducer类和一个特殊的combiner类,并且有一系列的“聚合器”(“aggregator”)(例如 “sum”,“max”,“min”等)用于聚合一组value的序列。用户可以使用Aggregate定义一个mapper插件类,这个类用于为 mapper输入的每个key/value对产生“可聚合项”。 combiner/reducer利用适当的聚合器聚合这些可聚合项。
要使用Aggregate,只需指定“-reducer aggregate”:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper myAggregatorForKeyCount.py \ -reducer aggregate \ -file myAggregatorForKeyCount.py \ -jobconf mapred.reduce.tasks=12 python程序myAggregatorForKeyCount.py例子:
#!/usr/bin/python
def generateLongCountToken(id): return &LongValueSum:& + id + &\t& + &1&
def main(argv): line = sys.stdin.readline(); try: while line: line = line[:-1]; fields = line.split(&\t&); print generateLongCountToken(fields[0]); line = sys.stdin.readline(); except &end of file&: return None if __name__ == &__main__&: main(sys.argv) 字段的选取(类似于unix中的 'cut' 命令)
Hadoop 的工具类org.apache.hadoop.mapred.lib.FieldSelectionMapReduce帮助用户高效处理文本数据,就像 unix中的“cut”工具。工具类中的map函数把输入的key/value对看作字段的列表。用户可以指定字段的分隔符(默认是tab),可以选择字 段列表中任意一段(由列表中一个或多个字段组成)作为map输出的key或者value。同样,工具类中的reduce函数也把输入的key/value 对看作字段的列表,用户可以选取任意一段作为reduce输出的key或value。例如:
$HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input myInputDirs \ -output myOutputDir \ -mapper org.apache.hadoop.mapred.lib.FieldSelectionMapReduce\ -reducer org.apache.hadoop.mapred.lib.FieldSelectionMapReduce\ -partitioner org.apache.hadoop.mapred.lib.KeyFieldBasedPartitioner \ -jobconf map.output.key.field.separa=. \ -jobconf num.key.fields.for.partition=2 \ -jobconf mapred.data.field.separator=. \ -jobconf map.output.key.value.fields.spec=6,5,1-3:0- \ -jobconf reduce.output.key.value.fields.spec=0-2:5- \ -jobconf mapred.reduce.tasks=12 选 项“-jobconf map.output.key.value.fields.spec=6,5,1-3:0-”指定了如何为map的输出选取key和value。Key选 取规则和value选取规则由“:”分割。在这个例子中,map输出的key由字段6,5,1,2和3组成。输出的value由所有字段组成(“0-”指 字段0以及之后所有字段)。
选项“-jobconf reduce.output.key.value.fields.spec=0-2:0-”(译者注:此处应为”0-2:5-“)指定如何为reduce 的输出选取value。本例中,reduce的输出的key将包含字段0,1,2(对应于原始的字段6,5,1)。 reduce输出的value将包含起自字段5的所有字段(对应于所有的原始字段)。
常见问题 我该怎样使用Hadoop Streaming运行一组独立(相关)的任务呢? 多数情况下,你不需要Map Reduce的全部功能,而只需要运行同一程序的多个实例,或者使用不同数据,或者在相同数据上使用不同的参数。你可以通过Hadoop Streaming来实现。
如何处理多个文件,其中每个文件一个map? 例如这样一个问题,在集群上压缩(zipping)一些文件,你可以使用以下几种方法:
使用Hadoop Streaming和用户编写的mapper脚本程序:
生成一个文件,文件中包含所有要压缩的文件在HDFS上的完整路径。每个map 任务获得一个路径名作为输入。
创建一个mapper脚本程序,实现如下功能:获得文件名,把该文件拷贝到本地,压缩该文件并把它发到期望的输出目录。
使用现有的Hadoop框架:
在main函数中添加如下命令:
FileOutputFormat.setCompressOutput(conf, true); FileOutputFormat.setOutputCompressorClass(conf, org.apache.press.GzipCodec.class); conf.setOutputFormat(NonSplitableTextInputFormat.class); conf.setNumReduceTasks(0); 编写map函数:
public void map(WritableComparable key, Writable value,
OutputCollector output,
Reporter reporter) throws IOException { output.collect((Text)value, null); } 注意输出的文件名和原文件名不同
应该使用多少个reducer? 请参考Hadoop Wiki:Reducer
如果在Shell脚本里设置一个别名,并放在-mapper之后,Streaming会正常运行吗?例如,alias cl='cut -fl',-mapper &cl&会运行正常吗?
脚本里无法使用别名,但是允许变量替换,例如:
$ hadoop dfs -cat samples/student_marks alice 50 bruce 70 charlie 80 dan 75
$ c2='cut -f2'; $HADOOP_HOME/bin/hadoop jar $HADOOP_HOME/hadoop-streaming.jar \ -input /user/me/samples/student_marks
-mapper \&$c2\& -reducer 'cat'
-output /user/me/samples/student_out
-jobconf mapred.job.name='Experiment'
$ hadoop dfs -ls samples/student_out Found 1 items/user/me/samples/student_out/part-00000 &r 3& 16
$ hadoop dfs -cat samples/student_out/part-00000 50 70 75 80 我可以使用UNIX pipes吗?例如 –mapper &cut –fl | set s/foo/bar/g&管用么?
现在不支持,而且会给出错误信息“java.io.IOException: Broken pipe”。这或许是一个bug,需要进一步研究。
在streaming作业中用-file选项运行一个分布式的超大可执行文件(例如,3.6G)时,我得到了一个错误信息“No space left on device”。如何解决?
配置变量stream.tmpdir指定了一个目录,在这个目录下要进行打jar包的操作。stream.tmpdir的默认值是/tmp,你需要将这个值设置为一个有更大空间的目录:
-jobconf stream.tmpdir=/export/bigspace/... 如何设置多个输入目录? 可以使用多个-input选项设置多个输入目录:
hadoop jar hadoop-streaming.jar -input '/user/foo/dir1' -input '/user/foo/dir2'
如何生成gzip格式的输出文件? 除 了纯文本格式的输出,你还可以生成gzip文件格式的输出,你只需设置streaming作业中的选项‘-jobconf press=true -jobconf pression.codec=org.apache.press.GzipCode’。
Streaming中如何自定义input/output format? 至少在Hadoop 0.14版本以前,不支持多个jar文件。所以当指定自定义的类时,你要把他们和原有的streaming jar打包在一起,并用这个自定义的jar包替换默认的hadoop streaming jar包。
Streaming如何解析XML文档? 你可以使用StreamXmlRecordReader来解析XML文档。
hadoop jar hadoop-streaming.jar -inputreader &StreamXmlRecord,begin=BEGIN_STRING,end=END_STRING& ..... (rest of the command) Map任务会把BEGIN_STRING和END_STRING之间的部分看作一条记录。
在streaming应用程序中如何更新计数器? streaming进程能够使用stderr发出计数器信息。 reporter:counter:&group&,&counter&,&amount& 应该被发送到stderr来更新计数器。
如何更新streaming应用程序的状态? streaming进程能够使用stderr发出状态信息。 reporter:status:&message& 要被发送到stderr来设置状态。
发布于 2年前,
阅读(277) | 评论(0) |
投票(0) | 收藏(2)
第一部分题目开始:
有两根不均匀分布的香,香烧完的时间是一个小时,你能用什么方法来确定一段15分钟的时间?
一个经理有三个女儿,三个女儿的年龄加起来等于13,三个女儿的年龄乘起来等于经理自己的年龄,有一个下属已知道经理的年龄,但仍不能确定经理三 个女儿的年龄,这时经理说只有一个女儿的头发是黑的,然后这个下属就知道了经理三个女儿的年龄。请问三个女儿的年龄分别是多少?为什么?
有三个人去住旅馆,住三间房,每一间房$10元,于是他们一共付给老板$30, 第二天,老板觉得三间房只需要$25元就够了于是叫小弟退回$5给三位客人, 谁知小弟贪心,只退回每人$1,自己偷偷拿了$2,这样一来便等于那三位客人每人各花了九元, 于是三个人一共花了$27,再加上小弟独吞了$2,总共是$29。可是当初他们三个人一共付出$30那么还有$1呢?
有两位盲人,他们都各自买了两对黑袜和两对白袜,八对袜了的布质、大小完全相同, 而每对袜了都有一张商标纸连着。两位盲人不小心将八对袜了混在一起。他们每人怎样才能取回黑袜和白袜各两对呢?
有一辆火车以每小时15公里的速度离开洛杉矶直奔纽约,另一辆火车以每小时20公里的速度从纽约开往洛杉矶。如果有一只鸟,以30公里每小时的速 度和两辆火车同时启动,从洛杉矶出发,碰到另一辆车后返回,依次在两辆火车来回飞行,直到两辆火车相遇,请问,这只小鸟飞行了多长距离?
你有两个罐子,50个红色弹球,50个蓝色弹球,随机选出一个罐子,随机选取出一个弹球放入罐子,怎么给红色弹球最大的选中机会?在你的计划中,得到红球的准确几率是多少?
你有四个装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?
你有一桶果冻,其中有黄色,绿色,红色三种,闭上眼睛,抓取两个同种颜色的果冻。抓取多少个就可以确定你肯定有两个同一颜色的果冻?
对一批编号为1~100,全部开关朝上(开)的灯进行以下操作:凡是1的倍数反方向拨一次开关;2的倍数反方向又拨一次开关;3的倍数反方向又拨一次开关……问:最后为关熄状态的灯的编号。
想象你在镜子前,请问,为什么镜子中的影像可以颠倒左右,却不能颠倒上下?
一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其它人帽子的颜色,却看不到自己的。主持人先让大家 看看别人头上戴的是什幺帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然 鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?
两个圆环,半径分别是1和2,小圆在大圆内部绕大圆圆周一周,问小圆自身转了几周?如果在大圆的外部,小圆自身转几周呢?
假如每3个空啤酒瓶可以换一瓶啤酒,某人买了10瓶啤酒,那么他最多可以喝到多少瓶啤酒?
香a点燃一头,香b点燃两头。等香b烧完时,时间过去了30分钟。再把香a剩下的另一头也点燃。从这时起到a烧完的时间就是15分钟。
三女的年龄应该是2、2、9。因为只有一个孩子黑头发,即只有她长大了,其他两个还是幼年时期即小于3岁,头发为淡色。再结合经理的年龄应该至少大于25。
典型的偷换概念。事实上3人只付出了27元,老板得了25元,小弟拿了2元。
将每对袜子拆开一人一只。
设洛杉矶到纽约的铁路长为A公里。则两辆火车到相遇用了A/(15+20)小时,也就是小鸟飞行的时间。所以小鸟飞行的距离就是速度&时间=30&A/35=6/7的洛杉矶到纽约的铁路长。
1/2的几率。先选出球在选罐子。这样罐子其实对球的颜色无影响。
1号罐取1丸,2号罐取2丸,3号罐取3丸,4号罐取4丸,称量该10个药丸,比正常重量重几就是几号罐的药有问题。
4个。数量>颜色种类。颜色必重复。
有10盏灯为灭,分别为1、4、9、16、25、36、49、64、81、100号。因为:每个质数能被1和自身整除,所以质数的灯是亮的。设一个合 数能被N个数整除,N必然是个偶数。对于非某数平方的合数来说,将被开关N次也就是偶数次,灯保留为亮;对于上面列出的平方数,则只被开关N-1次,所以 灯是灭的。
镜像对称的轴是人的中轴
有三个人戴黑帽。假设有N个人戴黑,当N=1时,戴黑人看见别人都为白则能肯定自己为黑。于是第一次关灯就应该有声。可以断定N&1。对于每 个戴黑的人来说,他能看见N-1顶黑帽,并由此假定自己为白。但等待N-1次还没有人打自己以后,每个戴黑人都能知道自己也是黑的了。所以第N次关灯就有 N个人打自己。
无论内外,小圆转两圈。
喝完10瓶后用9个空瓶换来3瓶啤酒(喝完后有4个空瓶) 喝完这三瓶又可以换到1瓶啤酒(喝完后有2个空瓶) 这时他有2个空酒瓶,如果他能向老板先借一个空酒瓶,就凑够了3个空瓶可以换到一瓶啤酒,把这瓶喝完后将空瓶还给老板就可以了。 所以他最多可以喝 10+3+1+1=15瓶
第二部分题目开始:
智力题1(海盗分金币)——海盗分金币
5个海盗抢得100枚金币后,讨论如何进行公正分配。他们商定的分配原则是: (1)抽签确定各人的分配顺序号码(1,2,3,4,5); (2)由抽到1号签的海盗提出分配方案,然后5人进行表决,如果方案得到超过半数的人同意,就按照他的方案进行分配,否则就将1号扔进大海喂鲨鱼; (3)如果1号被扔进大海,则由2号提出分配方案,然后由剩余的4人进行表决,当且仅当超过半数的人同意时,才会按照他的提案进行分配,否则也将被扔入大海; (4)依此类推。 这里假设每一个海盗都是绝顶聪明而理性,他们都能够进行严密的逻辑推理,并能很理智的判断自身的得失,即能够在保住性命的前提下得到最多的金币。同时 还假设每一轮表决后的结果都能顺利得到执行,那么抽到1号的海盗应该提出怎样的分配方案才能使自己既不被扔进海里,又可以得到更多的金币呢?
智力题2(猜牌问题)
S 先生、P先生、Q先生他们知道桌子的抽屉里有16张扑克牌:红桃A、Q、4 黑桃J、8、4、2、7、3 草花K、Q、5、4、6 方块A、5。约翰教授从这16张牌中挑出一张牌来,并把这张牌的点数告诉 P先生,把这张牌的花色告诉Q先生。这时,约翰教授问P先生和Q 先生:你们能从已知的点数或花色中推知这张牌是什么牌吗? 于是,S先生听到如下的对话: P先生:我不知道这张牌。 Q先生:我知道你不知道这张牌。 P先生:现在我知道这张牌了。 Q先生:我也知道了。 听罢以上的对话,S先生想了一想之后,就正确地推出这张牌是什么牌。 请问:这张牌是什么牌?
智力题3(燃绳问题) 烧一根不均匀的绳,从头烧到尾总共需要1个小时。现在有若干条材质相同的绳子,问如何用烧绳的方法来计时一个小时十五分钟呢?
智力题4(乒乓球问题)
假设排列着100个乒乓球,由两个人轮流拿球装入口袋,能拿到第100个乒乓球的人为胜利者。条件是:每次拿球者至少要拿1个,但最多不能超过5个,问:如果你是最先拿球的人,你该拿几个?以后怎么拿就能保证你能得到第100个乒乓球?
智力题5(喝汽水问题)& 1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?
智力题6(分割金条) 你让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?
智力题7(鬼谷考徒) 孙膑,庞涓都是鬼谷子的徒弟;一天鬼出了这道题目:他从2到99中选出两个不同的整数,把积告诉孙,把和告诉庞。 庞说:我虽然不能确定这两个数是什么,但是我肯定你也不知道这两个数是什么。 孙说:我本来的确不知道,但是听你这么一说,我现在能够确定这两个数字了。 庞说:既然你这么说,我现在也知道这两个数字是什么了。 问这两个数字是什么?为什么?
智力题8(舀酒难题) 据说有人给酒肆的老板娘出了一个难题:此人明明知道店里只有两个舀酒的勺子,分别能舀7两和11两酒,却硬要老板娘卖给他2两酒。聪明的老板娘毫不含糊,用这两个勺子在酒缸里舀酒,并倒来倒去,居然量出了2两酒,聪明的你能做到吗?
智力题9(五个囚犯)——一道真正难倒亿人的智力题,这是微软的面试题。 5个囚犯,分别按1-5号在装有100颗绿豆的麻袋抓绿豆,规定每人至少抓一颗,而抓得最多和最少的人将被处死,而且,他们之间不能交流,但在抓的时候,可以摸出剩下的豆子数。问他们中谁的存活机率最大?? 提示: 1,他们都是很聪明的人 2,他们的原则是先求保命,再去多杀人 3,100颗不必都分完 4,若有重复的情况,则也算最大或最小,一并处死
智力题10(国王与预言家)
在临上刑场前,国王对预言家说:“你不是很会预言吗?你怎么不能预言到你今天要被处死呢?我给你一个机会,你可以预言一下今天我将如何处死你。你如果预言对了,我就让你服毒死;否则,我就绞死你。” 但是聪明的预言家的回答,使得国王无论如何也无法将他处死。 请问,他是如何预言的?
智力题11(奇怪的村庄) 某地有两个奇怪的村庄,张庄的人在星期一、三、五说谎,李村的人在星期二、四、六说谎。在其他日子他们说实话。一天,外地的王从明来到这里,见到两个人,分别向他们提出关于日期的题。两个人都说:”前天是我说谎的日子。” 如果被问的两个人分别来自张庄和李村,那么这一天是星期几?
智力题12(谁偷了船长的戒指.?) 英国货船”伊丽莎白”号,首次远航日本。清晨,货船进人日本领海,船长大卫刚起床便去布置进港事宜,将一枚钻石戒指遗忘在船长室里。 15分钟以后,他回到船长室时,发现那枚戒指不见了。船长立即把当时正在值班的大副、水手、旗手和厨师找来盘问,然而这几名船员都否认进过船长室。 各人都声称自己当时不在现场。 大副:”我因为摔坏了眼镜,回到房间里去换了一副,当时我肯定在自己的房间里。” 水手:”当时我正忙着打捞救生圈。” 旗手:”我把旗挂倒了,当时我正在把旗子重新挂好,” 厨师:”当时我正修理电冰箱。” “难道戒指飞了?”平时便爱好侦探故事的大卫根据他们各自的陈述和相互作证的情况,略–思索,便找出了说谎者。事实证明,这个说谎者就是罪犯!
智力题13(称球问题) 12个球和一个天平,现知道只有一个和其它的重量不同,问怎样称才能用三次就找到那个球?(注意此题并未说明那个球的重量是轻是重,所以需要仔细考虑)
参考答案:
第一题: 1:96 2:0 3:0 4:2 5:2 首先,当对3的方案表决时,4会支持3,因为否则的话他就要被5反对,从而死。 因此,如果1,2死了,3的方案肯定是100,0,0,并且一定会得到3和4的支持,此时4,5的收入为0,因此1,2可以贿赂4,5而得到支持。 同时3的期望收入为100,他必定会不顾一切地反对1,2。 而如果1死了,2的方案肯定是98,0,1,1,并且一定会通过。 所以1的最优方案为96,0,0,2,2,并且一定会通过。 其实98,0,0,1,1也可以,并且有可能通过(看4,5的心情和残忍程度而定)。
第二题: P第一句表明点数为A,Q,5,4其中一种 Q第一句表明花色为红桃或方块 P第二句表明不是A Q第二句表明只能是方块5 答案:方块5
第三题: 取3根绳 先将第一根的两头都点燃,同时将第二根的某一头点燃。(t=0) 待第一根烧尽,点燃第二根的另一头。(t=30min) 待第二根烧尽,点燃第三根的两头。(t=45min) 待第三根烧尽,t=75min。
第四题: 先拿4个。 然后对方如果拿1到5个我就拿5到1个。于是无论如何剩下的球数为6n,n逐次少1,最后剩6个的时候恰好是我拿完,此时必胜。
第五题: 39瓶 20-&10-&5 拿4瓶换两瓶,再换一瓶,这个空瓶与5-4那个空瓶一起再换一瓶。20+10+5+2+1+1=39
第六题: 想了半天没想明白,上网找了找答案,竟然是…… 答案中认为给出的金条可以收回,显然是认为工人都是理想化的工人,不用吃饭也不用消费啊……恕我想不到……(把金条分为1,2,4,有点儿像我们的纸币只需要1,2,5就能对付所有的找钱问题!)
第七题: 仿佛是(4,t),其中t=7,13,19,23,31,37,43,53,61,67,73,79,83,91
第八题: 将7装满,倒入11,再装满,倒满11,此时7中剩3。 将11倒空,7中3倒入11,再装满7倒入11,此时11中有10。 将7再次装满,倒满11,此时7中剩6。 将11再次倒空,7中6倒入11。 将7再次装满,倒满11,此时7中剩2。
第九题: 制定这个规则的人肯定是法西斯…… 留楼,让我把第十题答案给出来…… 这题果然有难度……
第十题: “你不会毒死我的。”
第十一题: 同样可以穷举。 星期一。
首先证明,如果有三个球P1,P2,P3,满足,要么P1较重,要么P2,P3中有一个较轻,并且有2个标准球,则质量不同的那个可以用一次天平找出。事 实上,取P1,P2与标准球比较,如果平衡则P3为较轻,如果P1,P2质量之和大于标准球则P1为较重的球,如果P1,P2质量之和小于标准球则P2为 较轻的球。同理可得,P1,P2,P3满足要么P1较轻,要么P2,P3中有一个较重的情况同样可以一次找出非标准球。 先分成三批(标记为A、B、C组),每批4个,取A,B两批称量。如果平衡,则质量不同的球在C组,可以用两次称量找出(先取两个与标准球作比较,如果平 衡再在余下的两个中取一个与标准球作比较,如果不平衡,则在其中取一个与标准球作比较。)如果不平衡(不妨假定A组轻于B组),则C组为标准球。将A,B 排列如下 1234 A○○○○ B○○○○ 取A1,A2,B1(A’组)与A3,A4,B4(B’组)分别放在天平两边称量。如果A’组轻于B’组,则要么A1,A2中有较轻的,要么B4为较重 的,由前面的证明知,第三次称量可以找出质量不同的那个。如果A’组重于B’组,则要么B1为较重的,要么A3,A4中有较轻的,同样可以找出质量不同的 那个。如果平衡,则B2,B3中有较重的,分别放在天平两端即可找出较重的。
发布于 2年前,
阅读(63) | 评论(0) |
投票(0) | 收藏(3)
微软这样的大公司,自然是人人都想去的。但能进去的人肯定也不是什么等闲之辈,这光从那些被称为“超变态”的面试题中就可见一斑。不过再变态的题目,也是有解的。来看看它们是怎么被死理性派一一推倒的吧。
经常能在网上看到各种不知真假,却被转烂了的“超变态但很经典的微软面试题”。那微软这样的大公司,到底有多喜欢“蹂躏”面试者的智商呢?本文就从一套广为流传的的“10个最著名微软面试题”中选取了几个最经典的,来和它们较量较量。
闲话少叙,解题吧。
你的丈夫有外遇吗
一座小镇里有100对夫妇,他们都遵守一个奇怪的风俗:如果妻子发现丈夫背叛了她,那她就会在当天夜里杀死自己的丈夫。小镇里的女人都知道别人丈夫的秘密,却不会说出来。换言之,每个女人只知道除自己丈夫之外其他男人的外遇情况。突然有一天镇长宣布,至少有一个男人背叛了他的妻子,假设镇长说的是真话,所有人都相信镇长所说的,那么接下来将会发生什么?
我们不妨先假设只有1个男人背叛了他的妻子,这时那个男人的妻子会猛然发现自己竟然不知道任何男人有外遇的消息(而其他99个女人知道的都是1个男人背叛了自己的妻子,即真相),对此唯一的解释便是有且只有一个有外遇的男人,就是自己的丈夫。所以她会在当天夜里杀死自己的丈夫。然后,没有然后了。
那如果有2个男人呢?这时小镇里有98个女人知道真相,但另外2个女人只知道1个男人有外遇,并不能确定自己的丈夫是否也有外遇。所以在镇长宣布此事的当天,全镇相安无事。但到了第2天,当这2个女人发现对方都未处死自己的老公时,就会意识到不止一个男人有外遇了。那便是有2个男人有外遇,这样的话,其中1个肯定是自己的丈夫。于是,这2个女人会同时在夜里处死自己的丈夫。
以此类推,很容易归纳出来,如果小镇里有n个不忠的丈夫,他们都会在镇长宣布后的第n天夜里被处死。
实际上,有时候虽然只有极少量的信息,但只要仔细分析,一样可以得出有效的结论。上述这个谜题相信有很多人见过,类似的还有著名的&&,只是这个更加复杂一点。
隔离监狱中的100个犯人
在一所监狱中,关押了100个相互隔离的犯人。典狱长每天随机选择一名犯人(他可能被重复选中多次),扔到一间小黑屋中关禁闭。这个房间中只有一个电灯和开关,除了小黑屋中的人,谁都看不到这盏灯,更无法控制它。关进去的人则可以打开或关闭电灯,也可以选择什么都不干。犯人们随时可以叫停这场游戏并告诉典狱长:“所有犯人都被关过小黑屋。”如果这句话是真的,所有犯人将会被释放;但如果这句话是假的,他们全部会被处死。在游戏开始前,犯人们被允许聚在一起商议对策,他们该怎么做才能保证自己一定能够被释放呢?
首先我们随意选择一个犯人A作为计数者。
现在让除了A以外的任何一个犯人进入小黑屋后,都将严格遵循下面这个法则:
如果他以前从来没有打开过这盏电灯,并且现在这盏电灯是关着的,那么打开它,除此以外不作任何事情。而如果典狱长选择的是A,并且当他进入这个房间以后房间里的电灯是开着的,那么他就把电灯关掉,并在自己的计数里加1。当他的计数达到99之日(从1开始),便是所有犯人重获自由之时。
工作分金问题
有个工人将为你工作七天,你用一块金条来支付工资。每天工作结束以后你都要给工人发工资,但你只能在这块金条上折两次。应该如何选择金条上的折断位置,以及支付工资的方法?
这个问题并不困难,但如果工人为你工作X天,你该怎么分割这块金条呢?
让我们先来回答最初的问题,为读者做个启发。把金条分成如下三份:第一份是原金条的 1/7(编号为1号金条);第二份是原金条的 2/7(2号金条);第三份是 4/7(3号金条)。接下来的7天你将这样支付工资:
第1天:给工人1号金条(此时你有2号和3号金条,工人有1号金条)
第2天:给工人2号金条,并取回1号金条(此时你有1号和3号金条,工人有2号金条)
第3天:给工人1号金条(此时你有3号金条,工人有1号和2号金条)
第4天:给工人3号金条,并取回1号和2号金条(此时你有1号和2号金条,工人有3号金条)
第5天:给工人1号金条(此时你有2号金条,工人有1号和3号金条)
第6天:给工人2号金条,并取回1号金条(此时你有1号金条,工人有2号和3号金条)
第7天:给工人1号金条,事成收工。
有过一些编程经验的读者可能会马上意识到,这其实正是二进制的原理。 1,2,4 三个十进制数的二进制形式分别是 1,10,100,用这三个数可以表示 [0,7] 区间(换成二进制形式即 [000,111] 区间)里的所有整数。
同样的道理可以计算出,如果有工人为你工作X天,而你依然打算用一块金条来支付工资的话,那么最少需要在金条上折断( log&2&[X+1] - 1 ) 处。
你有10只装满了球的盒子,其中有一只盒子里装的是次品。已知正常的球每个重 10g,而次品球每个重 9g。如何只使用一次电子秤,就找出哪只盒子装的是次品?
我们在面对这类称重找次品的问题时,第一想法通常是从每个盒子中拿出一个球来称重。然而,这道题的关键恰恰是从不同的盒子里取出不同数目的球。
我们先把 10 只盒子从 0 到 9 编号,然后从每只盒子中取出与这只盒子编号数目相等的球来,举例来说,0号盒子里不需要取球, 1 号盒子里拿出 1 只球, 2 号盒子里拿出 2 只球,等等。
然后我们这些球一起放到电子秤上。假如所有的球都是正品,那么电子秤上的读数应该是450g;但是因为这堆球里可能有次品,所以实际读数是 ( 450 - x )g ,其中x是次品球的个数,同时这个个数又恰好次品盒子的编号。
四个人需要在夜间度过一座摇摇晃晃的吊桥。不幸的是,他们只有一个火把,而这座桥又太危险了,他们无法在不借助火把的情况下度过这座危桥。而更不幸的是,这座桥又不怎么结实,最多允许两个人同时度桥。四个人过桥的速度各不相同,分别是:1分钟,2分钟,7分钟,10分钟。显然,两人同时度桥,耗时就取决于最慢的人。那么,他们全部度过这座桥所需的时间最短是多少?
大部分人的第一想法往往是利用一个最快的人反复度桥来接送其他人,这样需要的时间是 2 + 1 + 7 + 1 + 10 = 21 分钟。的确很快,但是实际上还有更快的方法。
很容易想到的是,我们应该能让 7 和 10 一起过桥。但是接下来呢?难道让其中1个人再回去一趟吗?不,这样的话就太耗时了。如何解决这个问题呢?我们可以提前让1个脚程较快的家伙在桥的对岸等着。因此就有方案如下:
先让 1 和 2 一起过桥。耗时2分钟。
让 1 拿着火把回来。耗时1分钟。
让 7 和 10 一起过桥,耗时10分钟。
让 2 拿着火把回来。耗时2分钟。
最后再让 1 和 2 一起过桥。耗时2分钟。
最后总耗时为 2 + 1 + 10 + 2 + 2 = 17 分钟。
一天中时钟的时针和分针重叠几次?
直觉也许会告诉你24次,但事实并非如此,我们不妨来算一下。
当分针和时针从 12:00 处开始走动后,T个小时的时间里时钟的分针走T圈,时针则是 T/12 圈,两个表针第一次重合的时候分针比时针领先整整一圈,也就是 T = T/12 + 1 ,此时 T = 12/11 ,也就是表针在 12/11 时(比 1:05 稍微晚一些)第一次重叠。把重叠的次数换成N,然后把式子中的T换成24,我们就可以得到:
显然,N=22
即两个表针在一天内重叠22次。它们从来不会在上午或者下午的11点重合,因为它们要同时到达表盘的12点方向。
看到这里,各位读者是对打进微软内部更有把握了呢?
发布于 2年前,
阅读(58) | 评论(0) |
投票(0) | 收藏(1)
谷歌一直因为自由的氛围和轻松的办公环境,让全世界求职者羡慕不已。但是,只有面试过的人才知道,谷歌选择人才的标准是很高的。本文就选取了几道有真有假但都很经典的“谷歌面试题”,并给出详细解答。来看看你符不符合谷歌的调性吧。
长久以来,谷歌都因为拥有世界上最自由和优越的环境,让全人类羡慕不已。不过,谷歌这样一个以创造力为生的神奇地方,对应聘对象来说,想成为其中一员可是有着不小的难度。想进谷歌,先试试这些早已遍布互联网的谷歌面试题吧。
平分被有缺失的蛋糕
三个人打算分一个矩形的蛋糕,可是有一个人已经偷偷地切走了一小块矩形的部分。如果只能直直地切一刀,那么另外两个人应该怎么切才能体积均匀地分掉剩下的部分呢?
解答:&也许有人会说:横着切,将蛋糕分成两个等高的部分就好了嘛。但是一般蛋糕上层是奶油,下层只有干巴巴的面包,所以我们不准备把这个作为答案之一。
如果这个蛋糕没有被切走一部分,应该如何平分呢?方法当然有很多,但是所有的切法都有一个共同点,那就是这一刀一定经过矩形的中心点。反之亦然,所有经过中心点的直线都能将矩形平均分成两部分。带着这个结论回到开始的问题上,如果一刀经过大小两个矩形中心点,就能将大矩形 ABCD 和小矩形 AGFE 都分成面积相等的两部分,这样,我们的问题也就解决了。
在上图中,矩形AEFG是被偷偷挖走的部分。H和I是大小两个矩形的中心,直线JLK经过这两个中心点。可以看出四边形AJLG和JLFE的面积是相等的,而四边形AJKD和JKCB的面积也是相等的,因此剩下的深蓝色与绿色的面积也是相等的。
重男轻女的地方男女的比例是多少
假设一个村子里,村民们都有重男轻女的观念,每一对夫妻都会不断地生产,直到生出一个男孩。如果生男生女的概率是一样的,那这个村子最终的男女比例应该是多少?
解答:&如果这个村子里有C对夫妻,那最后就有C个男孩。而女孩的数量呢?这是一个数学上求期望值的问题。
不妨任选一户人家来分析,设这户人家有n个女孩。如果 n = 0 ,也就是说这户人家第一次就生了个男孩,那么这个概率便是1/2。 n = 1 时,便是先女后男,概率是 1/2 * 1/2 = 1/4 。n = 2 时,便是前两次生了两个女孩,第三次生了男孩,概率是 1/2*1/2*1/2 = 1/8 。以此类推,一户人家出现n个女孩的概率是 1/2n+1 。由此可以算出一户人家女孩数量的期望值是 0 + 1/4 + 2/8 + 3/16 + … = 1 。因此,C户人家的女孩数量的期望值便是C,女孩和男孩的数量在期望上是相等的。也就是说,即使是在一个重女轻男的地方,男女比例仍然是 1 : 1 。
怎么测鸡蛋的强度最方便
现在你在一栋 100 层高的大楼门口,手头上有两颗完全一样的神奇鸡蛋。如果你想知道这两个鸡蛋最高能从多少楼摔下而不破碎,用什么策略能保证你的尝试次数尽可能少呢?
解答:&在只有一个鸡蛋时,保险起见,我们只能从一楼开始,一层一层地试验,看看鸡蛋有没有被摔烂。这样最精确,但是消耗的时间也最久。如果我们事先就知道这个鸡蛋不被摔碎的最高落下点在30层到75层之间,我们最多也只要尝试45次就能知道结果。现在我们手上有两个鸡蛋,根据上面的分析,一个合理的策略就是用第一个鸡蛋确定出一个较小的楼层范围,然后在这个范围里用第二个鸡蛋从下往上逐层尝试。
比如说让第一个鸡蛋每隔5层试验一次。当它在某一层被摔烂时,也就意味着确定了一个4层的待测试宽度(为什么是4层呢?假如鸡蛋在5楼的时候没破,10楼的时候破了,那么我们就只需要知道鸡蛋在 6 , 7 , 8 , 9 层的结果)。这时候,用第二颗鸡蛋一层一层地尝试,就能用较少的次数找出鸡蛋刚好摔不烂的高度。
需要注意的是,如果想留给第二颗鸡蛋较小的测试宽度,就要缩短第一个鸡蛋的测试跨度。相应的,也就增加了尝试次数。为了确定合适的跨度,使得总试验次数之和尽可能小,我们可以采取如下的办法。
设跨度是L,第一颗鸡蛋的尝试次数就是[ 100/L ],第二颗鸡蛋的尝试次数就是 L - 1,因此尝试次数总和就是 [ 100/L ] + L - 1 。根据这个公式,我们可以列出下面这个表格:
可以看出,我们只需要选 8 - 13 之间的一个宽度,都能使得总尝试次数是19次。
但问题是,这已经是最优策略了吗,有没有更好的方法呢?
有的。上面的方法固定了第一颗鸡蛋的测试跨度,如果我们灵活变动,就能使得总尝试次数变得更少。首先,我们选择从14楼丢下第一颗鸡蛋。如果它破碎了,我们就从1楼开始,逐层丢第二颗鸡蛋,最多试14次便能得到答案。如果它没有破碎,那我们往上走 13 层,在 27 楼第二次丢下第一颗鸡蛋。此时如果鸡蛋碎了,那我们只需要在 15 层到 26 层之间用第二颗鸡蛋进行最多12次试验即可,加上第一颗鸡蛋的两次尝试,仍然是14次。类似的,依次减小测试跨度,如果鸡蛋足够顽强,那我们丢下第一颗鸡蛋的楼层就分别是 14 , 27 , 39 , 50 , 60 , 69 , 77 ,84 , 90 , 95 , 99 以及最后的100层。因为第一颗鸡蛋每多尝试一次,第二颗鸡蛋需要尝试的最大次数就减少一次,因此,总尝试次数的最大可能值一直是不变的,保持在14次。用这种方法,我们只需要不超过14次的尝试就能够找出答案。有没有更优的策略了?感兴趣的读者可以自行思考。
孩子多大了
两个数学家在某次会议上又见面了——他们是老朋友,可是有十几年没见了。
老张:这些年怎么样啊。
小王:挺好的,我结婚了,现在都是三个孩子的爸爸了。
老张:那很幸福啊,孩子们多大了?
小王:他们年龄乘积是72,年龄的和与你的出生日期一样(8月的某号)。
老张:我还是猜不出来。
小王:我的大儿子刚开始学钢琴。
老张:哦,我知道了!
问:小王的三个儿子分别多大呢?
解答:&这道题的思考比较繁琐,让我们一步一步地分析。
三个孩子年龄的乘积是72。年龄的和是8月份的某一号,也就是是在 1 ~ 31 之间。我们首先把符合所有上面两个条件的数列出来。
这是根据小王的一句话所能得到的信息。虽然我们不知道老张的生日是几号,但老张自己肯定知道,所以他只要找出哪个数对的和与自己的生日相同便能确定。可是他却说“我还是猜不出来”,那就表明和等于他自己生日的数对不止一个。因此可筛选出如下两组数:
这两组数的和都是14,所以老张无法判断。这时小王说“我的大儿子刚开始学钢琴”。在 2 , 6 , 6 和 3 , 3 , 8 中,能确定大儿子的是第二组。所以到这里,老张就知道了小王三个孩子的年龄。这个问题本身并不算难,但如果被当面问这个问题并要求很快答出来,那就需要一定能力了。
货真价实的谷歌面试题
不同于上面的“流传”,下面两道是已被确认了的google面试题。
第一题,给你一个长度为 N 的链表。N 很大,但你不知道 N 有多大。你的任务是从这 N 个元素中随机取出 k 个元素。你只能遍历这个链表一次,且必须保证取出的元素是完全随机的(出现概率均等)。
第二题,给你一个数组 A [ 1 .. n ] ,请你在 O ( n ) 的时间里构造一个新的数组 B [ 1 .. n ] ,使得 B [ i ] = A [ 1 ] * A [ 2 ] * ... * A [ n ]/A [ i ] 。你不能使用除法运算。
这两道题目看起来很专业,但有趣的是,即使没有学过信息学的人也可以想到答案。
第一题的意思就是有一大串物品,它们能且仅能逐个经过你眼前一次。你不知道它们的个数,要求你从中随机地抽取 k 个物品,同时必须保证取出的元素是完全随机的(出现概率均等)。
第二题给出了一个数列 A [ 1 .. n ] ,要求在较短的时间内不用除法构造一个新数列 B [ 1 .. n ] ,使得 B [i] = A [ 1 ] * A [ 2 ] * ... * A [ n ]/A [ i ] 。 n是这个数组的长度。而 O ( n ) 是评判计算方法速度的标准。如果一个解答方法在n任意变化的情况下,都能满足总共的计算次数相当于是 n 乘以一个常数C这个条件,那么就称这个解答方法是 O ( n ) 的;如果这个解答方法能满足总共的计算次数是 n&2&乘以常数C,那么这个解答方法就被称作是 O ( n&2&) 的。
第一题没有告诉我们物品的个数N,所以我们没法算出 k/N,连最基本的每样物品被选中的概率都不知道,还怎么继续操作呢?既然我们不知道一共有多少个物品,那我们就应该在所有的物品都经过我们眼前之后再做抉择。当每个物品经过我们眼前的时候,可以设法对应地给它生成一个 0 到 1 之间的随机数。等到我们见过了所有的物品之后,只需要选择对应的随机数最大的前 k 个物品就行了。
第二题不允许用除法增加了不少难度。 B [ i ] 不用除法来表示的话就是: B [ i ] = A [ 1 ] * ... * A [ i - 1 ] * A [ i + 1 ] * ... * A [ n ] 。若按照这个表达式进行计算,生成每个 B[ i ] 的时候要进行n - 1次乘法,这样一来完全生成 B [ 1 .. n ] 就需要 O ( n&2&) 的时间了。我们需要通过减少重复的运算来提高效率。
注意到 B [ i ] 可以看作是两个部分的乘积, A [ 1 ] * ... * A [ i - 1 ] 和 A [ i + 1 ] * ... * A [ n ] 。同理 B [ i + 1 ] 就由 A [ 1 ] * ... * A [ i - 1 ] * A [ i ] 和 A [ i + 2 ] * ... * A [ n ] 组成。计算 B [ i ] 时的许多乘法在计算 B [ i + 1 ] 的时候又进行了一遍,因此可以重复利用上一次运算的结果,以避免无谓的运算。从这点出发,我们构造两个新的数列:
S [ i ] = A [ 1 ] * ... * A [ i – 1 ]
T [ i ] = A [ i + 1 ] * ... * A [ n ]
因为生成完整的 S [ 1 .. n ] 和 T [ 1 .. n ] 都能在 O ( n ) 的时间内完成,那么根据 B [ i ] = S [ i ] * T [ i ] 这条式子,生成整个 B [ 1 .. n ] 便也能够在 O ( n ) 的时间内完成了。
不得不说,谷歌是个很爱玩的公司。它曾在MIT校园内到处张贴着一份密码,据说,这份密码包含了一个Google Jobs的电话号码,解开密码的人可以通过此电话留下自己的个人信息,进入谷歌工作。各位读者,你能解开这个密码吗?如果有漂亮的解答,我会在这里贴出来。
相关阅读:&
发布于 2年前,
阅读(90) | 评论(1) |
投票(0) | 收藏(1)
ASCII就是编码英文的26个字母和一些常见的符号,之后扩展了一半。总之是一个字节来做编码,大于128的部分是一些特殊符号。但ASCII是无法编码别的东西的,比如说是不存在“中文的ascii码需要2个字符”这种说法的。ASCII就只有一个字节。
Unicode是足够编码地球上所有的语言了,所以ASCII中所能表示的,Unicode当然全部包括了。Unicode本身是只有2个字节的,之所以出现UTF-8,UTF-16等等之类,那是为了针对不同的应用环境,提高整体编码效率,比如如果某篇文章里绝大部分是英语(单字节就能表示),就比较适合使用utf-8,而如果绝大部分是中文(需要双字节),可能就utf-16比较合适了
下面贴出用JavaScript对汉字进行转换的程序,在第一个框里输入汉字,点Convert,或在第一个框里输入转换后的汉字的编码,点Reconvert。
&html xmlns=&http://www.w3.org/1999/xhtml&&
&meta http-equiv=&Content-Type& content=&text/ charset=utf-8& /&
&title&Untitled Document&/title&
&style type=&text/css&&
font-family: Verdana, Arial, Helvetica, sans-
font-size: 12
color: #666666;
text-align:
text-decoration:
margin-right: 10
margin-left: 10
.btn a:hover {
background-color: #d8
border-top-width: 1
border-bottom-width: 1
border-top-style:
border-bottom-style:
border-top-color: #333366;
border-bottom-color: #333366;
text-decoration:
color: #666666;
border-top-width: 1
border-bottom-width: 1
border-top-style:
border-bottom-style:
border-top-color: #CCCCCC;
border-bottom-color: #CCCCCC;
width: 100
padding-top: 5
padding-right: 10
padding-bottom: 5
padding-left: 30
font-family: Verdana, Arial, Helvetica, sans-
font-size: 12
color: #333333;
line-height: 18
& &&textarea name=&source& rows=&14& id=&source& style=&width:99%&&中华人民共和国万岁
中華人民共和國萬歲
\u4E2D\u534E\u4EBA\u6C11\uC\u56FD\u4E07\u5C81
\u4E2D\u83EF\u4EBA\u6C11\uC\u570B\u842C\u6B72
&/textarea&
&div class=&btn&&
& &&a href=&javascript:action('CONVERT_FMT1')&&
& &&strong&Convert&/strong&&br /&
& &Fmort &#xxxx & &/a&&/div&
&div class=&btn&&
& &&a href=&javascript:action('CONVERT_FMT2')&&
& &&strong&Convert&/strong&&br /&
Fmort \uxxxx
&div class=&btn&&
& &&a href=&javascript:action('RECONVERT')&&
& &&strong&ReConvert&/strong&&br /&
To 汉字 &/a&&
&div id=&tt& style=&display:none&&&/div&
& &&textarea name=&show2& rows=&14& id=&show2& style=&width:99%&&&/textarea&
&script language=&javascript& type=&text/javascript&&
var oSource = document.getElementById(&source&);
var oShow2 = document.getElementById(&show2&);
var oTt = document.getElementById(&tt&);
function action(pChoice){
switch(pChoice){
& &case &CONVERT_FMT1&:
& & oShow2.value = ascii(oSource.value);
& &case &CONVERT_FMT2&:
& & oShow2.value = unicode(oSource.value);
& &case &RECONVERT&:
& & oShow2.value = reconvert(oSource.value);
function ascii(str){
return str.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,&\&#x$2;&)});
function unicode(str){
return str.replace(/[^\u0000-\u00FF]/g,function($0){return escape($0).replace(/(%u)(\w{4})/gi,&\\u$2&)});
function reconvert(str){&
str = str.replace(/(\\u\w{4})/gi,function($0){
& & & & & & &return (String.fromCharCode(parseInt((escape($0).replace(/(%5Cu)(\w{4})/g,&$2&)),16)));
& & & & & & &});
& & & & & &&
str = str.replace(/(&#x)(\w{4});/gi,function($0){
& & & & & & &return String.fromCharCode(parseInt(escape($0).replace(/(%26%23x)(\w{4})(%3B)/g,&$2&),16));
& & & & & & &}); & & & & & &
发布于 2年前,
阅读(926) | 评论(0) |
投票(0) | 收藏(0)
这也是我们
解答:(参考introduction to algrithms)
1,从任意节点s出发用深度优先遍历(或宽度优先遍历)遍历该图,若生成多棵树,则不是连通的。
2,反向图中所有的边。
3,&&&从节点s出发用深度优先遍历(或宽度优先遍历)遍历该图,若生成多棵树,则不是连通的,否则是强连通图。
理由:1保证了从s可以到达所有的节点。2,3说明从任意节点都可以到达s。任意节点i,j都是连通的因为
这个见地不错:如果图能从节点1出发寻找到所有的点,然后现在将有向边反向,如果还能搜到所有的点的话,就是一个强连通图,因为能够通过1搜索所有点,然后反边就说明能够从任一点到达1点。。
发布于 2年前,
阅读(148) | 评论(0) |
投票(0) | 收藏(0)
W3C DOM异常对象DOMException介绍
今天自己也碰到了一个exceptioin 11,是在提交表单的时候使用的是button而不是submit按钮(表单中包含type=file的input),后来改用submit按钮后就没问题了,
觉得这个分析比较靠谱:在使用jQuery的ajax且网络很慢、设置了timeout的情况下,直接不判断ajax的readyState而直接取responseText将出会错(此时xhr对象可能只有两个属性可用:responseXML、readyState)。
一、DOMException是?
DOMException是W3C DOM核心对象。DOMException接口表示一个处理的错误,当一个操作不可能执行的时候,会抛出一个异常。例如试图创建一个无效的DOM, 或通过一个不存在的节点作为参数节点操作方法。
举个板栗,如下代码:
var node = document.getElementsByTagName('h1').item(0);
var refnode = node.nextS
var newnode = document.createTextNode('这就是为何你挂了!');
node.insertBefore(newnode, refnode);
上面代码演示了一个会嗝屁的insertBefore操作,因为refnode不是一个子节点。在Opera浏览器下,上面的操作就会导致下面显示的异常错误:
Inline script thread
Unhandled Exception: [Object DOMException]
message: NOT_FOUND_ERR
DOM并不对每个可能发生的错误定义一个异常,例如参数、语法错误就不在其中,这种情况有其自己的一套错误报告机制来处理。
实际上,大多数浏览器已经把DOM异常作为本地机制。除了显示异常代码和信息外,还显示了浏览器可以提供的其他信息(如行数或堆栈轨迹)
二、DOM Exceptions兼容性
兼容性见下表:
Internet Explorer
上表的兼容性数据还是比较老的,按照常规,IE9也应该支持的,最新的Chrome浏览器一定支持。
考古价值的IE浏览器不支持该接口,他们使用本地错误(解析错误之类)。例如,上面插入节点的例子,在老IE下抛出的就是:Invalid argument. 在XML中,会给出更多的信息:Insert position Node must be a Child of the Node to insert under.
三、常量列表
该接口定义了ExceptionCode整数值——向外暴露code属性——指向每种类型的错误;这些定义参考下面些常量:
INDEX_SIZE_ERR&code 1如果索引是负值,或是超过了允许值。例如 的offset参数比字符串长度还要长。&
DOMSTRING_SIZE_ERR&code 2 的特定字符数据太大。其大小显示是依赖实现的,未被DOM定义(每个浏览器的限制细节参见 )。
&HIERARCHY_REQUEST_ERR&code 3节点不允许有新的子节点,或者新节点已经是其该节点的祖先节点。例如,尝试将 节点塞入 节点。&
WRONG_DOCUMENT_ERR&code 4试图使用跨文档的节点操作。例如, 的子节点来自其他 。而不是先输出(使用 )。&
INVALID_CHARACTER_ERR&code 5一个非法的或无效的字符指定一个有限制的字符串,例如元素的name. NO_DATA_ALLOWED_ERR&code 6为不支持数据的节点指定数据。如 节点本身不包含数据,其子节点包含。
NO_MODIFICATION_ALLOWED_ERR&code 7试图修改一个不能被修改的节点。例如,装载一个只读的节点。 NOT_FOUND_ERR&code 8引用的节点不存在。例如, 相关子节点不是引用的子节点。 NOT_SUPPORTED_ERR&code 9实现不支持的特定操作。例如使用一个节点的方法,但是此方法并没有实现,就是抛出此错误。&
INUSE_ATTRIBUTE_ERR&code 10试图添加一个正在使用的属性。例如使用 引用一个已经在另一个元素使用的 , 而不是克隆它首先(使用 )。&
INVALID_STATE_ERR&code 11试图使用一个不可用的对象。这种错误的抛出通常是因为某些内部原因,方法无法实现特定的操作。&
SYNTAX_ERR&code 12无效或非法的字符串被指定。例如,用无效的CSS值设置selectorText属性的CSSStyleRule.& //zxx: 我遇到该错误是因为在特定情况下,对&title&标签使用了innerHTML方法。 INVALID_MODIFICATION_ERR&code 13尝试修改一个节点的类型。例如,使用不匹配最初规则类型的值设置cssText属性的CSSRule.(如,为at-rule设置style-rule values值).&
NAMESPACE_ERR&code 14操作与命名空间冲突。例如 使用的名称歪瓜裂枣。 INVALID_ACCESS_ERR&code 15一个属性或操作不支持指定的节点。例如,尝试在一个不含float值的CSS属性上使用getFloatValue的CSSPrimitiveValue方法。
关于code:ExceptionCode(也就是上面列表中一而再再而三的code)的整数值表示DOMException的类型。
四、最后的说明
本文内容没什么看头。重要的记住这里有篇关于DOMException的文章即可,回头可以迅速找到就OK啦!上面展示的列表中对ExceptionCode不同值的解释太泛太笼统了,后面的举例感觉是要故意展示一些方法,属性等。因此,离自己所希望的人人进来,人人都有启发的愿景还是有一定差距的。DOMException的各个错误也是不容易碰到的,但是,一旦碰到是很头疼的,整个页面的JS基本上就会报废,而且,错误不易查找。例如,使用数字作为元素id,在某些特定情况下,某些浏览器下,就会报DOMException的错误。
我现在比以前懒的,要是过去,刚毕业那会,激情无限的时候,估计会废寝忘食把每个错误都呈现一遍。现在嘛,唉,搞不动了,而且,错误呈现实在不易。因此,抱歉,大家只能将就上面一些笼统泛泛的解释了吧。
不过嘛,团结才是力量,本文可以无限评论的。因此,您要是遇到DOMException错误,并因为这里或那里解决了,记得一定要把您遇到的错误code、具体情境以及解决方法。以评论或邮件()的形式告知,我一定会整理出现,放在正文中的。这样,集思广益,细流成海,以后,一旦遇到浏览器报DOMException的错误,来这里就可以搞定,岂不很好。
因此,希望本文可以成为一个解决DOMException错误的一个平台,收集各个同行的经验,造福自己以及其他同行;而不仅仅是个普通文章。想法是美好的,具体就要看您的贡献与支持了!一起努力吧!
发布于 2年前,
阅读(166) | 评论(0) |
投票(0) | 收藏(0)
盒子标签和属性对照
CSS语法 (不区分大小写)
JavaScript语法 (区分大小写)
border-bottom
borderBottom
border-bottom-color
borderBottomColor
border-bottom-style
borderBottomStyle
border-bottom-width
borderBottomWidth
border-color
borderColor
border-left
borderLeft
border-left-color
borderLeftColor
border-left-style
borderLeftStyle
border-left-width
borderLeftWidth
border-right
borderRight
border-right-color
borderRightColor
border-right-style
borderRightStyle
border-right-width
borderRightWidth
border-style
borderStyle
border-top
border-top-color
borderTopColor
border-top-style
borderTopStyle
border-top-width
borderTopWidth
border-width
borderWidth
floatStyle
margin-bottom
marginBottom
margin-left
marginLeft
margin-right
marginRight
margin-top
padding-bottom
paddingBottom
padding-left
paddingLeft
padding-right
paddingRight
padding-top
paddingTop
颜色和背景标签和属性对照
CSS语法 (不区分大小写)
JavaScript语法 (区分大小写)
background
background
background-attachment
backgroundAttachment
background-color
backgroundColor
background-image
backgroundImage
background-position
backgroundPosition
background-repeat
backgroundRepeat
样式标签和属性对照
CSS语法 (不区分大小写)
JavaScript语法 (区分大小写)
list-style-type
listStyleType
list-style-image
listStyleImage
list-style-position
listStylePosition
list-style
white-space
whiteSpace
文字样式标签和属性对照
CSS语法 (不区分大小写)
JavaScript语法 (区分大小写)
font-family
fontFamily
font-style
font-variant
fontVariant
font-weight
fontWeight
文本标签和属性对照
CSS语法 (不区分大小写)
JavaScript语法 (区分大小写)
letter-spacing
letterSpacing
line-break
line-height
lineHeight
text-align
text-decoration
textDecoration
text-indent
textIndent
text-justify
textJustify
text-transform
textTransform
vertical-align
verticalAlign
发布于 2年前,
阅读(9) | 评论(0) |
投票(0) | 收藏(0)}

我要回帖

更多关于 excel计算重复次数 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信