免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2006-03-21 09:12 |只看该作者
数学才是王道啊!

论坛徽章:
0
22 [报告]
发表于 2006-03-21 09:16 |只看该作者
同意!!!
对于我这种学文的来说,太赞同楼上的观点了!!
后悔学文啊!!

论坛徽章:
0
23 [报告]
发表于 2006-03-21 10:10 |只看该作者
原帖由 mingyanguo 于 2006-3-21 08:34 发表
也是从具体数学看的.
[code]
static    int
josephus(int n,int m)
{
    int jn,m1,n1;

    for(n1 = 2,jn = 1;n1 <= n; n1++){
        m1 = m;
        if(m1 > n1)
            m1 %= n1;
...


解释解释。。。

论坛徽章:
0
24 [报告]
发表于 2006-03-21 13:22 |只看该作者
原帖由 mingyanguo 于 2006-3-21 08:34 发表
也是从具体数学看的.
[code]
static    int
josephus(int n,int m)
{
    int jn,m1,n1;

    for(n1 = 2,jn = 1;n1 <= n; n1++){
        m1 = m;
        if(m1 > n1)
            m1 %= n1;
...



写的对吗?我怎么没看明白啊。
给解释一下吧,加点注释也行啊。

论坛徽章:
0
25 [报告]
发表于 2006-03-21 15:03 |只看该作者
当初我上高一时参加一个省级的计算机竞赛,两天的赛程,六道题(其实是八道,只不过每天各有一道是送分的,防止出现一堆零分,恐怕是领导那面不好交代,故而不算)。我就只解出了这一道,用 Pascal 编的程序,循环链表,居然拿了三等奖...

只不过现在想想,恐怕我还是只会做这一道...

论坛徽章:
0
26 [报告]
发表于 2006-03-21 15:19 |只看该作者
原帖由 isjfk 于 2006-3-21 15:03 发表
当初我上高一时参加一个省级的计算机竞赛,两天的赛程,六道题(其实是八道,只不过每天各有一道是送分的,防止出现一堆零分,恐怕是领导那面不好交代,故而不算)。我就只解出了这一道,用 Pascal 编的程序,循环 ...



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

很想挑战挑战!

给大家一起分享啊~~~

论坛徽章:
0
27 [报告]
发表于 2006-03-21 15:39 |只看该作者

数学nb啊

真他妈的优美啊!!!!
不过自己也写了一个,连指针都免了,呵呵:

#include<iostream.h>
#include<conio.h>
void main()
{
    cout<<"Input:";
    int n;
    cin>>n;
    int m=n;
    for(int i=1;i<=n;i++)
    {
        int p=i;
        if(i%3!=0)
        {
           while(i%3!=0)
           {
              if(n==2)
              break;
              i=i-(i/3-n%3);
              n-=n/3;
           }
           if(n==2)
           {
              if(i!=1)
              cout<<p;
              i=100;
           }
           else
           {
             i=p;
             n=m;
           }
        }
    }
     _getch();
}

论坛徽章:
0
28 [报告]
发表于 2006-03-22 14:48 |只看该作者
原帖由 marinekiller 于 2006-3-21 15:39 发表
真他妈的优美啊!!!!
不过自己也写了一个,连指针都免了,呵呵:

#include<iostream.h>
#include<conio.h>
void main()
{
    cout<<"Input:";
    int n;
    cin> ...





你能告诉我_getch();是什么吗?

论坛徽章:
0
29 [报告]
发表于 2006-03-22 16:48 |只看该作者
lu guo

论坛徽章:
0
30 [报告]
发表于 2006-03-22 16:58 |只看该作者

俺是菜鸟,这是我的源码。。

.hpp
#ifndef _JUMPSEA_H_
#define _JUMPSEA_H_
struct node
{
        int num;
        node *next;
};

#endif

.cpp

#include "jumpsea.hpp"
#include <iostream.h>

int main()
{
        int num=0;
        node *pNode=NULL,*pHead=NULL;
        cout<<"please input the total num(3-100),input \'0' for end:";
        cin>>num;

        if ((num>=3 && num<=100))
        {
                /******构建循环 链表********/
                pHead=new node;
                pHead->num=1;
                pNode=new node;
                pHead->next=pNode;
                for (int i=2;i<num;i++)
                {
                        pNode->num=i;
                        pNode->next=new node;
                        pNode=pNode->next;
                }
                pNode->num=num;
                pNode->next=pHead;

                /*******完成链表构建**/
                       
                //输出构建好的链表
                pNode=pHead->next;
                cout<<pHead->num<<"->"<<pNode->num;
                while(pNode->next != pHead)
                {
                        pNode=pNode->next;
                        cout<<"->"<<pNode->num;
                }
                cout<<endl;
               
                int count=2;
                int total = num;
                node *pf=NULL,*pn=NULL;
                pf=pHead;
                pn=pHead->next;
                while(total>=2)
                {       
                       
                        pHead=pn;
                        pNode=pHead->next;
                        cout<<pHead->num<<"->"<<pNode->num;
                        while(pNode->next != pHead)
                        {
                                pNode=pNode->next;
                                cout<<"->"<<pNode->num;       
                        }
                        cout<<endl;
                       
                       
                        if(count==3)
                        {
                                pf->next=pn->next;
                                delete pn;
                                pn=pf->next;
                                total--;
                                count=1;       
                        }
                        else
                        {
                                pf=pf->next;
                                pn=pn->next;
                                count++;
                        }
                               
                }
                cout<<pn->num<<endl;
                delete pn;
        }
        else
        {
                cout<<"error"<<endl;
        }

        return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP