免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
1234
最近访问板块 发新帖
楼主: lilovewu01
打印 上一主题 下一主题

[请教]---这有一道经典智力题,挑战编成逻辑思维 [复制链接]

论坛徽章:
0
31 [报告]
发表于 2006-03-22 17:37 |只看该作者
从这个算法优化(消除递归)来的。

  1. static    int
  2. josephus(int n,int m)
  3. {


  4.     int jn,var,m1;
  5.     if(n == 1)
  6.         return    1;
  7.     if(m == 1)
  8.        return    n;
  9.     var = josephus(n - 1,m);
  10.     m1 = m;
  11.     if(m1 > n)
  12.         m1 %= n;
  13.     if(var > n - m1)
  14.         jn = var - (n - m1);
  15.     else
  16.         jn = var + m1;
  17.     return    jn;
  18. }
复制代码

虽然不是不能解释,不过解释起来很麻烦也不容易理解,上面的这个应该是比较明显的了。

论坛徽章:
0
32 [报告]
发表于 2006-03-22 17:44 |只看该作者
2 楼不是已经给出最简单的方法了吗?

#include <stdio.h>
int main(int argc, char **argv)
{
        int people_num=10; /* default 10 people */
        int N;
        if (argc == 2)
                people_num = atoi(argv[1]);

        N = 3*people_num;

        while(N>people_num)
                N = (N-people_num-1)/2 + N - people_num;
        printf("the final people num in %d is %d\n", people_num,N);

}

   这个方法就是比较难理解一点。

论坛徽章:
0
33 [报告]
发表于 2006-03-22 18:15 |只看该作者
现实不象这样简单,试想楼上的都在那条船上,谁会是那个幸运儿了?
不要BS我

论坛徽章:
0
34 [报告]
发表于 2006-03-24 20:13 |只看该作者
原帖由 explorerexe 于 2006-3-21 15:19 发表



还能想起来一两道当时做不出来的题吗?

很想挑战挑战!

给大家一起分享啊~~~

好多年啦,而且题目都好长,大部分我根本就没有理解是怎么回事...

有兴趣可以去搜一下这几年计算机竞赛的题目。我感觉对编程的要求倒是不高,但是对数学要求很高。

论坛徽章:
0
35 [报告]
发表于 2006-03-24 20:14 |只看该作者
原帖由 wealk 于 2006-3-22 18:15 发表
现实不象这样简单,试想楼上的都在那条船上,谁会是那个幸运儿了?
不要BS我

那也得有台电脑,是不是

论坛徽章:
0
36 [报告]
发表于 2006-03-27 17:59 |只看该作者

回复 1楼 lilovewu01 的帖子

#include<stdio.h>
main()
{
        int i=0,num,counter=0,ac=0,out=0,s[1000]={0};
        printf("tell me the number :";
        scanf("%d",&num);
        for(i=0;i<=num-1;i++)
        s[i]=1;
        for(;{
        for(i=0;i<=num-1;i++)
        {
                if(s[i]==1)
                counter++;
                if(counter==3)
                {       
                        counter=0;
                        ac++;
                        if(ac!=num)
                        s[i]=0;
                        else for(i=0;i<=num-1;i++)
                                        {if(s[i]==1)
                                                {out=1;break;}
                                                }
                }if(out==1) break;
        }
        if(out==1) break;
        }printf("%d\n",i+1);
        getch();
}
我也贴个源码.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP