题目

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;
}

测试结果:

【蓝桥杯基础练习】教徒与非教徒问题相关推荐

  1. 蓝桥杯基础练习合集一(C语言) 1.A+B问题2.数列排序3.十六进制转八进制4.十六进制转十进制5.十进制转十六进制

    目录 1.A+B问题 2.数列排序 3.十六进制转八进制 4.十六进制转十进制 5.十进制转十六进制 1.A+B问题 问题描述 输入A.B,输出A+B. 输入格式 输入的第一行包括两个整数,由空格分隔 ...

  2. 蓝桥杯基础视频 笔记

    学习地址:哔哩哔哩网站--蓝桥杯基础视频         博主整理--源码下载--百度网盘链接 蓝桥杯 Java B组 省赛真题详解及小结汇总[2013年(第4届)~2020年(第11届)] 注意:部 ...

  3. 蓝桥杯基础-【切面条】不用画图的解题思路

    我们先来看[切面条]的题目: 一根高筋拉面,中间切一刀,可以得到2根面条. 如果先对折1次,中间切一刀,可以得到3根面条. 如果连续对折2次,中间切一刀,可以得到5根面条. 那么,连续对折10次,中间 ...

  4. 蓝桥杯基础练习一闰年判断

    蓝桥杯基础练习一闰年判断 会不定时发布蓝桥杯练习题目,有需要的可以关注一下,谢谢! 1.闰年判断问题 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个年份,判断这一年是不是闰 ...

  5. 蓝桥杯-基础练习-特殊回文数

    蓝桥杯-基础练习-特殊回文数 问题描述 123321是一个非常特殊的数,它从左边读和从右边读是一样的. 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n . 输入格式 输 ...

  6. 蓝桥杯 基础练习 分解质因数 python语言

    蓝桥杯 基础练习 分解质因数 python语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解, ...

  7. 蓝桥杯 基础练习 分解质因数 C语言

    蓝桥杯 基础练习 分解质因数 C语言 描述 求出区间[a,b]中所有整数的质因数分解. 输入 输入描述: 输入两个整数a,b. 输入样例: 3 10 输出 输出描述: 每行输出一个数的分解,形如k=a ...

  8. 蓝桥杯 基础练习VIP FJ的字符串 java

    蓝桥杯 基础练习VIP FJ的字符串 java 题目 题目描述 FJ在沙盘上写了这样一些字符串: A1 = "A" A2 = "ABA" A3 = " ...

  9. 蓝桥杯基础练习---特殊数字

    蓝桥杯基础练习---特殊数字 特殊的数字 该题目实现程序: 特殊的数字 问题描述: 153是一个非常特殊的数,它等于它的每位数字的立方和,即153=1的3次方+5的3次方+3的3次方=1+125+27 ...

  10. 蓝桥杯基础试题练习小结(vip)(二)

    试题 基础练习 矩形面积交 问题描述 平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴.对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积. 输入格式 输入仅包含两行, ...

最新文章

  1. 车载DMI linux系统,基于嵌入式的CTCS3级车载DMI系统的设计与实现
  2. JobScheduler学习 附官方demo
  3. Ubuntu使用——23(dock的美化)
  4. Ubuntu 下安装LEMP环境 实战
  5. 用原生 JS 实现 MVVM 框架2——单向绑定
  6. Js 枚举定义Layer Icon
  7. java mysql dump_Java 调用Mysql dump 备份数据库
  8. Java 程序性能优化《第一章》Java性能调优概述 1.4小结
  9. 网络编程之 创建多个子进程,避免踩坑。
  10. python判断素数的函数_使用Python判断质数(素数)的简单方法讲解
  11. volatile解析
  12. NJUPT_CTF easychallenge 解题脚本
  13. Solr搜索引擎——中文分词器
  14. maximum call stack size exceeded ajax,Maximum call stack size exceeded error
  15. [Redis]Redis客户端
  16. python的拼音_Python之拼音拆分
  17. omnet++ tictoc2 实例分析
  18. Java的foreach中,变量加final的作用(for(final XXX xxx : xxxs))
  19. 飞腾国产处理器FT-2000/4在麒麟Kylin系统下I2C-Tools工具使用
  20. 给git-bash安装某些应用(make,wget,hugo,xpdf,nano)

热门文章

  1. CompletableFuture使用详解(全网看这一篇就行)
  2. 测试测控软件,测控软件技术
  3. 快递接口—分析对比·
  4. vue图片裁剪组件_Vue.js图像裁剪组件
  5. 【OpenCV】获得视频的帧数、FPS以及按帧数将图片保存到本地
  6. 【福利】送编程日历,GitChat 祝你新年无 BUG
  7. 通过Python的pdfplumber库将pdf转为图片
  8. 自由职业者如何用一台电脑赚钱?
  9. OpenCV入门系列 —— bilateralFilter双边滤波
  10. Nginx增加m3u8流视频文件功能模块 推流和拉流