算法智力题

挺有意思的三道智力题,学习与分享一下。。转于:http://blog.csdn.net/firefly_2002/article/category/1217507

一、一百个灯泡排成一排,第一轮将所有灯泡打开;第二轮每隔一个灯泡关掉一个,即排在偶数的灯泡都被关掉。第三轮每隔两个灯泡,将开着的灯泡关掉,关掉的灯泡打开。以此类推,第100轮的时候,还有几盏灯泡亮着?你知道答案吗?
别人的算法:

1.算法
1. 全亮
2. 2,4,6,8,10, ...反应 1,2定型 1亮
3. 3,6,9,12,15,18...反应 1,2,3定型 1亮
4. 4,8,12,16,20 ... 反应1,2,3,4定型1,4亮
5. 5,10,15,20 ..反应,1,2,3,4,5定型 1,4亮
6. 6,12,18.. 反应 1-6定型 1,4亮
7. 7,14,21,28 ... 1-7定型, 1,4亮
8. 8,16,24, 1-8定 1,4亮
9, 9,18,27, 1-9定 1,4,9亮
...
算到这有猜想,,平方数位灯亮,懒的研证了
1-10 ^2 = 1,4,9,16,25,36,49,64,81,100 共10灯亮...

 

2.
10盏灯泡亮着,这10盏灯泡排位数都是平方数。

根据提示已经可以看出,这个问题的实质就是找出有多少个灯泡的排位数拥有奇数个因子。每拥有一个因子,到这个因子数的那一轮时,这个灯泡就会被转换开关状态。

比如第1轮,因为所有100个数字都有因数1,所以全部被打开;第2轮,只有那些拥有2这个因子、能被2整除的数字的灯泡转换状态被关掉;第3轮,只有那些拥有3这个因子、能被3整除的数字的灯泡被转换状态。以此类推,如果灯泡排位数拥有奇数个因子,意味着它被打开和关上奇数次,那它就最终还是被打开的状态,如果灯泡排位数拥有偶数个因子,那它最终就是被关上的状态。

比如第1个灯泡有奇数个因子,第2个有偶数个(1,2),第3个有偶数个(1,3)第4个有奇数个(1,2,4),所以 第4个灯泡最后还是亮着的。

最终计算得出,所有排位数为平方数的灯泡最终还是亮着的,因为这些数都拥有奇数个因子,1,4,9,16……

在100以内,共有10个平方数,分别是1,4,9,16,25,36,49,64,81,100。这10个排位数的灯泡,最终都还是亮着。

我竟然算的是49。。。。

参照牛人:

(明天再想,真晚)

#include <stdio.h>
#define N 100
void main ()
{
int i,j,s=0,a[N];
for (i=0;i<N;i++)
 a[i]=1;
for(i=1;i<=N;i++)
 for(j=0;j<N;j=j+i)
  a[j]=0-a[j];
for(i=0;i<N;i++)
{
 if(a[i]==-1)
 {printf ("%d\t",i+1);
 s++;}
}
printf ("%d\n",s);

}

程序改完啦~~!!!!!!!!!!!!!!!!!!!!!!!!!!!!

#include <stdio.h>
#define N 100
void main ()
{
int i,j,s=0,a[N+1];
for (i=0;i<=N;i++)
 a[i]=1;
for(i=1;i<=N;i++)

 for(j=0;j<=N;j=j+i)
  a[j]=0-a[j];
for(i=0;i<=N;i++)
{
 if(a[i]==-1)
 {
  printf ("%d\t",i);
 s++;
 }
}
printf ("%d\n",s);
}


二、1到9填在9个格子中,让横竖斜的3个数相加都相等

法一:

算法简析:

为什么和一定是15呢?

设第一行 的和为X;第二行的和为X;第三行的和为X。

3X=1+2+3+..+9=45你等于是把这九个数都加了一遍。

可知:X=15再确定最中心的数是5.


设S=横着加第二行(中心行)+竖着加第二列(中心列)+斜着加两次(X)。

你发现中心数加了4次,其他的都加了一次。(中心数多加了3次)

S=4X=4*15=60=1+2+3+..+9+中心数*3

中心数=5


四个角不可能是奇数 。否则:斜着加会出问题

因为:假如左上是奇数,奇+5+右下数=15 右下必为奇数

此时: 假如右上为奇数,则左下必为奇数,最终 全部是奇数, 

 假如右上为偶数,则左下必为偶数,最终剩下的空格全是偶数。

共6个偶数,但偶数只有 2 4 6 8 四个 不够哦。


所以四个角 不可能是奇数。然后四个角代入2 4 6 8,自己凑吧。


方法二:

解以上不定方程式


设排列为

ABC

DEF

GHI

A+B+C=15

D+E+F=15

G+H+I=15

A+D+G=15

B+E+F=15

C+F+I=15

A+E+I=15

C+E+G=15

解以上不定方程式,就可以算出来

实际上,这是数独最古老的一种叫做河图,传说是从河里出来的龟身上的图案,具体你可以学习中国传统的文化部分.

数独的一般解法就是试验加经验

本题的记忆方法是偶角奇边坐心五.一线双角相对画.



三、

一个偶然的机会再次接触到了爱因斯坦谜题,一时来了兴致,用C#做了一个程序,看看到底是谁养鱼(大学毕业后接触过这道题,不过很遗憾,那时的我没有成为2%的人,所以不知道是谁在养鱼)?

这道迷题出自1981年柏林的德国逻辑思考学院,据说世界上只有2%的人能出答案,就连大名鼎鼎的爱因斯坦也成为此题大伤脑。爱因斯坦谜题的中文表述是这样的:

1. 有5栋5种颜色的房子

2. 每一位房子的主人国籍都不同

3. 这五个人每人只喝一个牌子的饮料,只抽一个牌子的香烟,只养一种宠物

4. 没有人有相同的宠物,抽相同牌子的烟,喝相同牌子的饮料

已知条件:

1. 英国人住在红房子里

2. 瑞典人养了一条狗

3. 丹麦人喝?

4. 绿房子在白房子的左边

5. 绿房子主人喝咖啡

6. 抽pallmall烟的人养了一只鸟

7. 黄房子主人抽dunhill烟

8. 住在中间房子的人喝牛奶

9. 挪威人住在第一间房子

10.抽混合烟的人住在养猫人的旁边

11.养马人住在抽dunhill烟人的旁边

12.抽bluemaster烟的人喝啤酒

13.德国人抽prince烟

14.挪威人住在蓝房子旁边

15.抽混合烟的人的邻居喝矿泉水

问题:谁养鱼?









黄色+挪威人+水+DUNHILL+猫  
蓝色+丹麦人+茶+BLENOS+马  
红色+英国人+牛奶+PALLMALL+鸟  
绿色+德国人+咖啡+PRINCE+鱼  
白色+瑞典人+啤酒+BLUEMASTER+狗


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值