| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 866 人关注过本帖
标题:猫吃老鼠问题的求解
只看楼主 加入收藏
myang
Rank: 4
等 级:业余侠客
威 望:1
帖 子:88
专家分:208
注 册:2009-8-28
结帖率:80%
收藏
 问题点数:0 回复次数:3 
猫吃老鼠问题的求解
昨天看到一片帖子关于猫吃老鼠的问题。
一、问题描述
    现有n个老鼠围成一圆圈,有一只猫从任意位置开始吃老鼠,每次都隔一个老鼠吃,请给出最后一个老鼠的编号?题目要求是任给老鼠数n,输出猫最后吃的老鼠的编号。

二、问题求解
    我们假设老鼠按顺时针方向编号,猫从第一号老鼠开始吃。比如现有4个老鼠围成一个圆,则猫吃老鼠的顺序应该为1->3->2->4,即最后一个吃的老鼠的编号是4。
#include <stdio.h>
#include <stdlib.h>
typedef struct tagCatEatMouse
{
    int flag;
    struct tagCatEatMouse *last;
}CATEatMouse,*pCatEatMouse;
pCatEatMouse create(int n);
pCatEatMouse eat(pCatEatMouse LastCat,int n);
void EatTheMouse(pCatEatMouse food);
int main()
{
    pCatEatMouse HeadCat;
    HeadCat=eat(create(9),9);
     printf("%d\n",HeadCat->flag);
    return 0;
}
pCatEatMouse create(int n)
{
    pCatEatMouse head,savepoint;
    head=(pCatEatMouse)malloc(sizeof(CATEatMouse));
    savepoint=head;
    head->flag=0;
    for (int i=0;i<n-1;i++)
    {
        pCatEatMouse next;
        next=(pCatEatMouse)malloc(sizeof(CATEatMouse));
        head->last=next;
        next->flag=i+1;
        head=next;
    }
    head->last=savepoint;
    return savepoint;
}
pCatEatMouse eat(pCatEatMouse LastCat,int n)
{
    pCatEatMouse lcat,eatmouse;
    lcat=eatmouse=LastCat;
    for (int i=0;i<n-1;i++)
    {
        LastCat=LastCat->last;
    }
    for (i=0;i<n-1;i++)
    {
        lcat=lcat->last;
        LastCat->last=lcat;
        LastCat=lcat;
        EatTheMouse(eatmouse);
        pCatEatMouse eatmouse;
        eatmouse=(pCatEatMouse)malloc(sizeof(CATEatMouse));
        eatmouse=LastCat->last;
        lcat=lcat->last;
    }
    EatTheMouse(eatmouse);
    return LastCat;
}
void EatTheMouse(pCatEatMouse food)
{
    free(food);
}
这是小弟的代码,还请高手斧正。多多指教。
搜索更多相关主题的帖子: 顺时针 
2011-03-16 00:33
vandychan
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
等 级:贵宾
威 望:18
帖 子:2296
专家分:6418
注 册:2010-8-20
收藏
得分:0 
不错哈  

到底是“出来混迟早要还”还是“杀人放火金腰带”?
2011-03-16 00:55
njkido
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:224
专家分:1184
注 册:2011-3-8
收藏
得分:0 
2011-03-16 09:41
bosstianbei
Rank: 1
等 级:新手上路
帖 子:2
专家分:2
注 册:2011-12-3
收藏
得分:0 
#include<stdio.h>
#define MOUSE_NUM 20
void main()
{
    int mouse[MOUSE_NUM]={0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
    int flag=1,i=0,k=3,temp=0,count=1;
    while(flag)
    {
        if(mouse[i]==1)
        {
            temp++;
        }

        if(temp%(k+1)==0&&mouse[i]==1)
        {
            mouse[i]=0;
            count++;
            temp=0;
        }
        i=(i+1)%MOUSE_NUM;
        if(count==MOUSE_NUM-1)
        {
            flag=0;
        }
    }

    for(i=0;i<MOUSE_NUM;i++)
    {
        if (mouse[i]==1)
        {
            printf("它应站在第%d个位置。\n",i+1);
        }
   
    }
}
2012-02-16 19:44
快速回复:猫吃老鼠问题的求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012205 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved