【蓝桥杯基础练习】教徒与非教徒问题
题目
17世纪法国数学家加斯帕在《数学的游戏问题》中讲的一个故事:n个教徒和n个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了个办法:2n个人围成一个圆圈,从第一个人开始依次循环报数,每数到第九个人就将他扔入大海,如此循环直到仅剩n个人为止 。问怎样的排法,才能使每次投入大海的都是非教徒。
输入的形式和输入值的范围
【输入】输入文件由一行构成,就是n的值。
输出的形式
【输出】输出文件中是一行字符串,字符串由n个‘@’字符(代表教徒)和n个‘+’
字符(代表非教徒)排列构成。该排列使得按照前面的约定每次投入大海的都是非教徒。
测试数据
【输入范例】
15
【输出范例】
@@@@+++++@@+@@@+@++@@+++@++@@+
解决代码(使用链表解决该题):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100
typedef struct Node//定义一个循环链表
{char data;int data1;struct Node* next;
}Node,*LinkList;
void InitClist(LinkList* CL)//初始化一个循环链表
{*CL = (LinkList)malloc(sizeof(Node));(*CL)->next = *CL;
}
void CreatClist(LinkList CL,int n)//在循环链表中不断插入元素
{Node *rear, * s[N];rear = CL;//定义的指针指向这个循环链表for (int i = 0; i < 2 * n; i++)//在循环链表中不断插入新的节点{s[i] = (Node*)malloc(sizeof(Node));rear->next = s[i];s[i]->data1 = i;rear=s[i];}rear->next = CL;//将循环链表的末尾链接至开头
}
int main()
{int n,temp=0,k=0,ly=0;char array[N];LinkList L;Node* s;InitClist(&L);//初始化新循环链表scanf("%d", &n);//输入非教徒人数,非教徒人数=教徒人数int length=2*n;//人数为两倍的非教徒人数(教徒+非教徒)CreatClist(L, n);//创建链表while (length != n)//限制条件,最终人数不等于教徒人数{for (int j = 0; j <8; j++)//不断循环,指向第八个人{L = L->next;}s = L->next;//一个指针,指向L的下一个,即第九个人temp = s->data1;//将第九个人所在位置保存下来if((temp+9)<(2*n-1))//判断这个人的位置+9是否未超过这些教徒的人数,未超出,L等于s的下一个结点{ L->next = s->next;}else //如果超出了,L应该指向s的下一个的下一个(跳过头结点){ L->next = s->next; L=L->next;}free(s);//释放s结点length--;//长度减array[temp]='+';//让数组的temp位置变成+}for (k = 0; k < 2 * n; k++)//数组中,如果其所在位置不为“+”,则将其设为“@”{if (array[k] != '+')array[k]='@';}for (k = 0; k < 2 * n; k++)//输出printf("%c", array[k]);printf("\n");return 0;
}
测试结果:
【蓝桥杯基础练习】教徒与非教徒问题相关推荐
- 蓝桥杯基础练习合集一(C语言) 1.A+B问题2.数列排序3.十六进制转八进制4.十六进制转十进制5.十进制转十六进制
目录 1.A+B问题 2.数列排序 3.十六进制转八进制 4.十六进制转十进制 5.十进制转十六进制 1.A+B问题 问题描述 输入A.B,输出A+B. 输入格式 输入的第一行包括两个整数,由空格分隔 ...
- 蓝桥杯基础视频 笔记
学习地址:哔哩哔哩网站--蓝桥杯基础视频 博主整理--源码下载--百度网盘链接 蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部 ...
- 蓝桥杯基础-【切面条】不用画图的解题思路
我们先来看[切面条]的题目: 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以得到3根面条. 如果连续对折2次,中间切一刀,可以得到5根面条. 那么,连续对折10次,中间 ...
- 蓝桥杯基础练习一闰年判断
蓝桥杯基础练习一闰年判断 会不定时发布蓝桥杯练习题目,有需要的可以关注一下,谢谢! 1.闰年判断问题 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个年份,判断这一年是不是闰 ...
- 蓝桥杯-基础练习-特殊回文数
蓝桥杯-基础练习-特殊回文数 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输 ...
- 蓝桥杯 基础练习 分解质因数 python语言
蓝桥杯 基础练习 分解质因数 python语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解, ...
- 蓝桥杯 基础练习 分解质因数 C语言
蓝桥杯 基础练习 分解质因数 C语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解,形如k=a ...
- 蓝桥杯 基础练习VIP FJ的字符串 java
蓝桥杯 基础练习VIP FJ的字符串 java 题目 题目描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = " ...
- 蓝桥杯基础练习---特殊数字
蓝桥杯基础练习---特殊数字 特殊的数字 该题目实现程序: 特殊的数字 问题描述: 153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1的3次方+5的3次方+3的3次方=1+125+27 ...
- 蓝桥杯基础试题练习小结(vip)(二)
试题 基础练习 矩形面积交 问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行, ...
最新文章
- 车载DMI linux系统,基于嵌入式的CTCS3级车载DMI系统的设计与实现
- JobScheduler学习 附官方demo
- Ubuntu使用——23(dock的美化)
- Ubuntu 下安装LEMP环境 实战
- 用原生 JS 实现 MVVM 框架2——单向绑定
- Js 枚举定义Layer Icon
- java mysql dump_Java 调用Mysql dump 备份数据库
- Java 程序性能优化《第一章》Java性能调优概述 1.4小结
- 网络编程之 创建多个子进程,避免踩坑。
- python判断素数的函数_使用Python判断质数(素数)的简单方法讲解
- volatile解析
- NJUPT_CTF easychallenge 解题脚本
- Solr搜索引擎——中文分词器
- maximum call stack size exceeded ajax,Maximum call stack size exceeded error
- [Redis]Redis客户端
- python的拼音_Python之拼音拆分
- omnet++ tictoc2 实例分析
- Java的foreach中,变量加final的作用(for(final XXX xxx : xxxs))
- 飞腾国产处理器FT-2000/4在麒麟Kylin系统下I2C-Tools工具使用
- 给git-bash安装某些应用(make,wget,hugo,xpdf,nano)