(C语言)约瑟夫环问题
来源:互联网 发布:淘宝卖水弹枪不违法吗 编辑:程序博客网 时间:2024/06/05 21:59
题目描述
有n个人围成一圈,按顺序排号。从第一个人开始报数,凡报到m的人退出游戏,然后下一个接着重新开始报数。比如n = 6,m = 3,当报到3时3号退出游戏,接着4号又从1开始报数......问最后留下的是原来第几号的那位?
输入
输入有多组测试数据。
每组测试数据在一行中给出正整数n和m,(0<n<=100000, 0<m<=100000);
当读取到文件结尾时输入结束。
输出
对每组测试数据,在一行中输出最后留下来的人的初始编号
样例输入
20 510 410 3100 373
样例输出
75498
(个人认为这题对我的影响很大,因为第一次接触数据结构就是写的这个题目,刚开始看到链表的我是很不想活的,真的觉得这些东西都好恶心,因为我认为C语言中两个最难的结构体和指针包括在一起了,所以很蒙,于是又重新看了一下C语言的书,包括结构体和指针,然后我发现其中的结构体的别名和结构指针有一些是可以省略,有一些是可以替换的,当然都是本人亲自实践了的,下面代码中注释的地方都是可以替换或者等价的地方,然后说说这个题吧,这个题用的是循环链表,就是将链表的尾结点一直指向链表的头结点,然后期间包括链表的初始化和插入删除的一些基本的操作,于是当循环到出局编号的时候将该结点删除同时释放掉 free()函数,然后继续对这个循环链表遍历,当链表中只有一个结点的时候退出循环,然后输出该结点的data即可,所以说,理解了链表的基本操作之后哦就很简单,而且我发现链表真的很有用,不管是在实用价值还是ACM中都是一个很好的方法)#include<stdio.h>
#include<stdlib.h>typedef struct Node{ // 构建链表结构体
int data;
struct Node *next;
}JoseNode,*PNode; //JoseNode *==PNode
void InitNode(PNode *h){ //初始化链表
(*h)->next = (*h);
}
int InsertNode(JoseNode *h,int pos,int x) { //链表的插入数据
PNode p=h,q; //JoseNode *p=h,*q;
int i=1;
if (pos == 1) {
p->data=x;
p->next=p;
return 0;
}
while (i<pos-1) {
p=p->next;
i++;
}
q=(JoseNode *)malloc(sizeof(JoseNode)); //q=(PNode)malloc(sizeof(JoseNode));
q->data=x;
q->next=p->next;
p->next=q;
return 0;
}
void deNode(PNode h,int m,int k) { //在链表中删除某个结点
PNode p=h,q;
int i=0;
while (m>1) {
for (i=1; i<k-1; i++)
p=p->next;
q=p->next;
p->next=q->next;
free(q);
p=p->next;
m--;
}
printf("%d\n",p->data);
}
int main(){
int N,k;
int i;
while(scanf("%d%d",&N,&k)!=EOF) {
JoseNode *h=(PNode)malloc(sizeof(JoseNode)); //PNode h=(PNode)malloc(sizeof(JoseNode));
InitNode(&h);
for (i=1; i<=N; i++)
InsertNode(h,i,i);
if (k>1)
deNode(h,N,k);
else
printf("%d\n",&N);
}
return 0;
}
0 0
- (C语言)约瑟夫环问题
- C语言/约瑟夫环问题
- 【C语言】 约瑟夫环问题
- 约瑟夫环问题(c语言数组实现)
- 约瑟夫环问题 数据结构 c语言
- C语言实现约瑟夫环问题
- C语言求解约瑟夫问题
- 约瑟夫问题 C语言代码
- 数据结构 C语言 约瑟夫问题
- 约瑟夫环(求助C语言高手)
- 约瑟夫环(c语言程序完整版)
- c语言(约瑟夫环)2017.4.23
- 约瑟夫环问题 (c / c++)
- 约瑟夫问题(c++)
- C语言循环链表约瑟夫环问题
- 【c语言】使用数组解决 约瑟夫环问题
- C语言实现猴子选大王(约瑟夫问题)
- 约瑟夫问题(C语言 -循环链表)
- What Kind of Friends Are You?
- mini2440实验,用key控制led
- Java面试准备十八:数据库——临时表、视图
- 大数据Web日志分析 用Hadoop统计KPI指标实例
- Hdu 2516 取石子游戏 斐波那契博弈
- (C语言)约瑟夫环问题
- [BZOJ4259]残缺的字符串
- Let's Chat
- ZOJ 142
- 【Linux】正则表达式初识
- UVa 1594 Ducci Sequence(模拟+查重)
- 认识oracle中的sqlnet.ora tnsnames.ora listener.ora三个文件
- Java中的值传递与引用传递
- mysql关键字AFTER