题目:选猴王

topcodingmaster 2009-09-23 12:10:25

题目:选猴王

一群猴子有m只,坐在一起选猴王,每只猴子都有一个编号1~m。从n号猴子开始报号,报到r号则踢出;下只猴子继续从第n号开始报,依次循环,则最后剩下的一只猴子就是猴王了,求出这只猴子的编号。
要求使用顺序存储结构或链式结构。

#define DEBUG
#include<stdio.h>
#define TOTAL

#include <iostream.h>

typedef struct monkey
{
unsigned int number;
struct monkey *prev;
struct monkey *next;
} MONKEY;

int main(void)
{
int m,n,r;
cout<<"输入m:";
cin>>m;
cout<<"输入n";
cin>>n;
cout<<"输入r";
cin>>r;
int i;
MONKEY monkeys[m];
MONKEY *ptr;

for (i = 0; i < m; i++)
{
monkeys[i].number = i+1;
monkeys[i].prev = (i == 0) ? &(monkeys[TOTAL-1]) : &(monkeys[i-1]);
monkeys[i].next = (i == TOTAL-1) ? monkeys : &(monkeys[i+1]) ;
}
ptr = monkeys;

do
{
for (i = 2; i <= r; i++)
{
ptr = ptr->next;
}
#ifdef DEBUG
printf( "#%d is deleted.\n", ptr->number );
#endif
ptr->prev->next = ptr->next;
ptr->next->prev = ptr->prev;
ptr = ptr->next;
} while (ptr->next != ptr);

printf( "*****The king is #%d*****\n", ptr->number );
return 0;
}


compiled之后
c:\documents and settings\admin\桌面\c++\选猴王\(⊙o⊙)哦.cpp(30) : error C2057: expected constant expression
c:\documents and settings\admin\桌面\c++\选猴王\(⊙o⊙)哦.cpp(30) : error C2466: cannot allocate an array of constant size 0
c:\documents and settings\admin\桌面\c++\选猴王\(⊙o⊙)哦.cpp(30) : error C2133: 'monkeys' : unknown size

人有三个错,希望大家帮忙改改。
...全文
964 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
CCfan999 2009-10-04
  • 打赏
  • 举报
回复
那位大虾可不可以全用C来写啊,先谢谢啦。因为C++中有得语法不是很懂,所以上面得代码看得似是而非。。。
j4036 2009-09-26
  • 打赏
  • 举报
回复
- -||
c和c++混编的额。。。。
看起有点纠结。。没学过c
失落的凡凡 2009-09-23
  • 打赏
  • 举报
回复
TOTLE根本没定义嘛,改成m应该就好了
bfhtian 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chengcheng1253 的回复:]
约瑟夫环?
[/Quote]
没错,以前论坛上有人发过
cphj 2009-09-23
  • 打赏
  • 举报
回复
3个错都是一个问题,见2楼

当然程序还有其他错误没报出来,见1楼和3楼
chengcheng1253 2009-09-23
  • 打赏
  • 举报
回复
约瑟夫环?
whg01 2009-09-23
  • 打赏
  • 举报
回复
1. #define TOTAL 这个宏没有使用,可以删掉。
2. MONKEY monkeys[m]; 改成 MONKEY *monkeys = malloc(m*sizeof(MONKEY )); 定义数组必须是编译时能确定大小。在程序的最好加上free(monkeys);释放内存。
3. for (i = 2; i <= r; i++) 改成for (i = 1; i <= r; i++) 因为是从1数到r。

野男孩 2009-09-23
  • 打赏
  • 举报
回复
MONKEY monkeys[m];

m不是常量,不能这么定义数组。动态分配内存吧。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧