c语言文件打开幕式,c语言奥运会开幕式
c语言奥运会开幕式
答案:3 信息版本:手机版
解决时间 2019-10-03 07:07
已解决
2019-10-02 14:55
学校给高一(三)班分配了一个名额,去参加奥运会的开幕式。每个人都争着要去,可是名额只有一个,怎么办?班长想出了一个办法,让班上的所有同学(共有n个同学)围成一圈,按照顺时针方向进行编号。然后随便选定一个数m,并且从1号同学开始按照顺时针方向依次报数,1,
2, …,
m,凡报到m的同学,都要主动退出圈子。然后不停地按顺时针方向逐一让报出m者出圈,最后剩下的那个人就是去参加开幕式的人。
要求:用环形链表的方法来求解。所谓环形链表,即对于链表尾结点,其next指针又指向了链表的首结点。基本思路是先创建一个环形链表,模拟众同学围成一圈的情形。然后进入循环淘汰环节,模拟从1到m报数,每次让一位同学(结点)退出圈子。
最佳答案
2019-10-02 15:11
#include
#include
struct link
{
int number;
struct link *previous;
struct link *next;
};
struct link *head;
struct link *rear;
int status = 0;
void crt(int n)
{
struct link *p;
if(status==0) { head->number = n; status = 1; return ;}
p = malloc(sizeof(struct link));
p->number = n;
head->previous = p;
rear->next = p;
p->previous = rear;
p->next = head;
rear = p;
}
void del(struct link *p)
{
if(p->previous == p->next ) return ;
p->previous->next = p->next;
p->next->previous = p->previous;
if(p==head) head = p->next;
if(p==rear) rear = p->previous;
free(p);
}
void show(struct link *p)
{
printf("%d", p->number);
}
void main()
{
struct link start, *p;
int i, n, m, j;
head = &start;
rear = &start;
p = head;
scanf("%d %d", &n, &m);
for(i=1; i<=n; i++)
crt(i);
for(i=0; inext;
p = p->next;
show(p->previous); printf("号出列\n");
del(p->previous);
}
printf("最后一位是:"); show(head);
}
全部回答
1楼
2019-10-02 16:51
这是一个约瑟夫环的问题。这个问题c语言实现代码如下:
#include
#include
struct _Node
{
int data;
struct _Node *next;
};
typedef struct _Node node_t;
typedef struct _Linklist
{
node_t * phead;
node_t * ptail;
int len;
}Linklist;
static node_t * GetNode( int i ) // 新建并初始化节点
{
node_t *pNode;
pNode = ( node_t * )malloc( sizeof( node_t ) );
if(!pNode)
{
printf("Error,the memory is not enough!\n");
exit(-1);
}
pNode -> data = i;
pNode -> next = NULL;
return pNode;
}
void init_list( Linklist *plist ) // 用第一个节点初始化循环单链表
{
node_t *p;
p = GetNode( 1 );
// printf("The New Node is: %d\n", p -> data); // **** TEST ****
plist -> phead = p;
plist -> ptail = p;
p -> next = plist -> phead;
plist -> len = 1;
}
static void Create_List( Linklist *plist, int n ) // 把其余数据添加到循环单链表中
{
int i = 0;
node_t *pNew;
for(i=2;i<=n;i++)
{
pNew = GetNode( i );
plist -> ptail -> next = pNew;
plist -> ptail = pNew;
pNew -> next = plist -> phead;
plist -> len ++;
}
printf("Completes the e-way circulation chain table the foundation!\n");
}
void Print_List( Linklist *plist ) // 输出链表内容
{
node_t *pCur = plist -> phead;
do
{
printf("The %d person.\n", pCur -> data );
pCur = pCur -> next;
}while( pCur != plist -> phead );
printf("The length of the List: %d\n", plist -> len );
}
void joseph( Linklist *plist, int m ) //约瑟夫回环函数实现
{
node_t *pPre = plist -> ptail;
node_t *pCur = plist -> phead;
int i;
while( plist -> len != 1 )
{
i = 0;
while( i < m-1 )
{
pPre = pPre -> next;
i ++;
}
pCur = pPre -> next;
pPre -> next = pCur -> next;
free( pCur );
plist -> len --;
}
printf("The last one is: %d\n", pPre -> data );
}
int main()
{
int n = 0;
printf("输入学生人数 ");
scanf("%d", &n );
int m = 0;
printf("输入m的值 ");
scanf("%d", &m );
Linklist pList;
init_list( &pList );
Create_List( &pList, n );
Print_List( &pList );
joseph( &pList, m );
return 0;
}
2楼
2019-10-02 16:45
这是一个约瑟夫环的问题。这个问题c语言实现代码如下:
#include
#include
struct _Node
{
int data;
struct _Node *next;
};
typedef struct _Node node_t;
typedef struct _Linklist
{
node_t * phead;
node_t * ptail;
int len;
}Linklist;
static node_t * GetNode( int i ) // 新建并初始化节点
{
node_t *pNode;
pNode = ( node_t * )malloc( sizeof( node_t ) );
if(!pNode)
{
printf("Error,the memory is not enough!
我要举报
如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!
大家都在看
推荐资讯
c语言文件打开幕式,c语言奥运会开幕式相关推荐
- C语言文件缓冲区作用,C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲...
//文件结构体FILE的理解以及缓冲区再讲 #include #include //要点:文件结构 //struct _iobuf { // char *_ptr; ------当前缓冲区内容指针 / ...
- c语言 文件f指针,C语言文件选择题
C语言文件选择题 1.标准库函数fgets(s,n,f)的功能是 A) 从文件f中读取长度为n的字符串存入指针s所指的内存 B) 从文件f中读取长度不超过n-1的字符串存入指针s所指的内存 C) 从文 ...
- C语言 文件读写 EOF - C语言零基础入门教程
目录 一.EOF 简介 二.EOF 实战 三.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门 一.EOF 简介 EOF 是 End Of Fi ...
- c语言文件读写ppt,c语言文件读写.ppt
c语言文件读写.ppt 一.文件操作概述 所谓文件,是指存放在外部存储介质(可以是磁盘.光盘.磁带等等)上数据的集合. 要想读取外部存储介质中的数据,必须先按照文件名找到相应的文件,然后再从文件中读取 ...
- c语言文件构建步骤,C语言文件的创建与建立
C语言文件的创建与建立 c语言中对于文件的创建与建立已经有相当经典且应用相当广泛的语法了.下面是小编为大家带来的C语言文件的创建与建立的知识,欢迎阅读. 首先是文件的创建: # include # i ...
- c语言文件归并问题_C语言 | 选择法对10个数排序
例60:C语言实现用选择法对10个整数排序. 解析:选择排序思路如下,设有10个元素a[1]~a[10],将a[1]与a[2]~a[10],若a[1]比a[2]~a[10]都小,则不进行交换,即无任何 ...
- c语言文件打开函数,C语言fopen函数中文件打开方式(参数值)
满意答案 keaichengb.. 推荐于 2017.09.05 采纳率:40% 等级:12 已帮助:3704人 C语言fopen函数用于打开文件. 函数原型:FILE * fopen(cons ...
- c语言文件分类二进制,C语言实现文件版(二进制文件版)通讯录
C语言实现文件版(二进制文件版)通讯录 C语言实现文件版(二进制文件版)通讯录 通讯录功能 添加,删除,查找,修改, 全部, 储存 文章目录通讯录功能 文件结构 一.主函数文件(入口) 二.函数声明文 ...
- php source insight语言文件,玩转SourceInsight语言定义——让你的sourceinsight
[2008/1/11 (五) 0:48] SourceInsight是一个非常不错的代码浏览/编辑工具,好就好在它能建立对象/函数/变量的索引,能轻松跳转到对象/函数/变量的定义处,只要这个定义的文件 ...
- C语言文件日期排序,C语言产生一个大txt文件,并进行排序
产生了一个十万行的txt文件,每一行都是一个0-512之间的随机数,并对这个文件进行排序,生成一个递增排序的文件: #define _CRT_SECURE_NO_WARNINGS #include # ...
最新文章
- 极力推荐python初学者使用wingIDE
- linux sudo 实现原理
- 【笔记篇】C#笔记1
- centos 6.5 关闭防火墙
- 网页php脚本是什么意思,php脚本是什么意思
- 张尧学:祝YOCSEF越办越好
- windows下nginx的安装及使用
- 关于Java的十件事
- 许昌市襄县机器人_襄城县机器人自动码垛机生产工厂批发销售
- python取字符串一部分_python,如何获取字符串中的子字符串,部分字符串
- 浪潮之巅--蓝色巨人读后感
- FPGA设计中遇到的奇葩问题之“芯片也要看出身”(二)
- 关于vim复制剪贴粘贴命令的总结-转
- 【缓存】J2Cache —— 基于内存和 Redis 的两级 Java 缓存框架的使用方法
- 上海内推 | 微软亚洲研究院上海人工智能组招聘深度学习研究实习生
- django按日期查询数据
- 鼠标回报率测试软件用哪个,揭开鼠标的秘密 艾尚教你如何测回报率
- 用canvas制作的躲避球小游戏html5源码
- Sass的概念以及命令
- 【学习笔记】《卓有成效的管理者》 第二章 掌握自己的时间
热门文章
- 邮件服务器最常见的安全问题及解决办法
- PHP cookie和session的分析
- SpringMVC全局异常处理机制常见问题及底层实现分析
- postman工具 如何传递当前时间戳和MD5加密
- Spring Cloud Config分布式配置中心高可用及配置刷新(学习总结)
- 从0到1构建数据生态系列(二):拆解架构蓝图
- Codeforces348B Apple Tree DFS
- Java非对称加密开发(三)-代码及说明
- 解决相片上传主键唯一性问题,java 上传相片到服务器的时候,相片保存主键用guid。...
- 照片教你eclipse通过使用gradle 打包Android