求一道编程题目

ypchengmsdn 2009-04-12 03:50:34

用 c 语言实现:
要求:编写代码容易看懂;

设有n个人围坐一圈并按顺时针方向从1到n 编号,从第s个人开始进行1到 m的报数,
报数到第m个人,此人出圈,再从他的下一个人重新开始1到m 的报数,如此进行下去
直到所有的人都出圈为止。
现要求按出圈次序,每10个人一组,给出这n个人的顺序表。请编制函数 Josegh()
实现此功能并调用函数WriteDate()把结果p输出到文件JOSE.OUT中。
设 n=100,s=1, m=10。
(1) 将1到n个人的序号存入一维数组p中;
(2) 若第i个人报数后出圈,则将p[i]置于数组的倒数第 i 个位置上,而原来
第i+1个至倒数第i个元素依次向前移动一个位置;
(3) 重复第(2) 步直至圈中只剩下p[1] 为止。
注意:部分源程序存放在PROG1.C中。
请勿改动主函数main()和输出数据函数WriteDat()的内容。
...全文
103 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gao125210 2009-04-12
  • 打赏
  • 举报
回复
up
atuano 2009-04-12
  • 打赏
  • 举报
回复
认真学习一下
haxker 2009-04-12
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <malloc.h>
struct Link{
int id;
Link *next;
};
void Initialize(int n, Link *head)
{
int i;
Link *p;
for (i = 1, p = head; i <= n; i++){
p->next = (Link *) malloc (sizeof(Link));
p = p->next;
p->id = i;
}
p->next = head->next;
}

void Delete(Link *node)
{
Link *temp;
temp = node->next;
printf("%d ", node->next->id);
node->next = temp->next;
free(temp);
}
void main()
{
Link *head, *p;
int n, i, k;
printf("%s","Input n,k = ");
scanf("%d%d", &n, &k);
head = (Link *) malloc (sizeof(Link));
head->next = (Link *) malloc (sizeof(Link));
Initialize(n, head);
for (p = head, i = 1; p != p->next; p = p->next, i++){
if (i == k){
i = 1;
Delete(p);
}
}
printf("\n");
printf("%d", p->id);
}
前面有问问过了
mengde007 2009-04-12
  • 打赏
  • 举报
回复
约瑟夫算法,网上一搜一大堆
buyan2009 2009-04-12
  • 打赏
  • 举报
回复
up
十八道胡同 2009-04-12
  • 打赏
  • 举报
回复
一搜一箩筐
  • 打赏
  • 举报
回复
Josegh() 算法...网上大把,楼主不会自己搜索下.
  • 打赏
  • 举报
回复
Josegh() 算法...网上大把,楼主不会自己搜索下.
k1988 2009-04-12
  • 打赏
  • 举报
回复
我很想帮你,但是我对算法很头疼,所以就不研究了。帮你顶一下。不过MS这个东西网上比较多吧,搜一下喽。

69,374

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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