现在的位置: 首页 > 综合 > 正文

几道趣味题

2014年08月10日 ⁄ 综合 ⁄ 共 847字 ⁄ 字号 评论关闭

1.有一个随机数发生器,可以产生1到5的随机数,利用这个随机发生器,怎样产生1到7的随机数


最直接的想法是拿随机数乘以7然后除以5,但这样产生的结果并不是等概率的,7*rand()/5中产生不了3和6,因而不可行

正确的做法是5*rand()+rand(),然后舍弃最后4个数,剩余21个数字。每三个数分为一组,分别产生1,2,3,4,5,6,7,这时产生的7个数字是等概率的。   5*rand()产生的数字范围是[0,25],rand()产生的数字范围是[1,5],5*rand()+rand()的范围是[6,30],这25个数字产生的概率均为1/25,三个数字分为一组,1,2,3,4,5,6,7产生的概率均为3/25。

Matlab程序如下:

a=[];
for j=1:1000
    k=5*randi([1 5],1,1)+randi([1 5],1,1);
    if (k>26)
        continue;
    else
        a=[a floor(k/3-1)];       
end
end


2.abc+cba=1333,分别求abc


a+c为13,a与c的取值组合为{4,9},{5,8},{6,7},{7,6},{8,5},{9,4}

代码如下:

# include <stdio.h>
int main()
{
    for (int i=4;i<10;i++)
    for (int j=0;j<10;j++)
    if (101*13+20*j==1333)
    printf("a is %d,b is %d,c is %d\n",i,j,13-i);	
    return 0;
}


3.有10瓶药,其中1瓶药品受到污染,未受污染的药品每粒1g,受到污染的重量1.1g,现有一个天平,只允许称一次,找出受污染的那瓶药


天平只能使用一次,解法可以是从#1瓶取1粒药,从#2瓶取2粒药,#3瓶取3粒药,…

如果#1瓶的药受污染,天平称出的重量是(1+2+3…+10)+1*0.1=55.1g,如果#2瓶的药受到污染,天平称出的重量是(1+2+3+4+…+10)+2*0.1=55.2g…

受到污染的瓶子是(重量-55)/0.1

【上篇】
【下篇】

抱歉!评论已关闭.