题目:有N个人,从1到N编号,按照编号顺序围成一圈。从第一个人开始报数(从1报到3),凡报到3的人退出圈子。

问:最后留下的人的编号是几号。

==============================

这是百度知道中,很常见的题目,多数都有了正确答案。

如:

http://zhidao.baidu.com/question/95065794.html

http://zhidao.baidu.com/question/211023828.html

http://zhidao.baidu.com/question/341545042.html

http://zhidao.baidu.com/question/353160064.html

……

但是,看这些答案的程序,太麻烦的居多。

做而论道针对这个问题,写了一个程序,自我感觉是最简短的。呵呵,欢迎网友拍砖。

程序如下:

==============================

#include

#define N 5               //人数

void  main()

{

int a[N] = {0}, i = 0, call_n = 0, out_n = 0;

while (1)  {          //循环报数

if(a[i] == 0)  {    //如果健在

if (out_n == (N - 1))  break; //如果仅剩一人

call_n++;         //报数

call_n %= 3;      //最大为3,到了3就从0开始

if(call_n == 0) {a[i] = 1; out_n++;} //为0(即3)出局

}

i++;   i %= N;      //循环转向下一人

}

printf("最后剩余者的编号是:%d\n", i + 1);

}//------------------完

==============================

有些题目中,要求使用指针,其实也不难,指针和数组是统一的,程序如下:

==============================

#include

#define N 5               //人数

void  main()

{

int a[N] = {0}, i = 0, out_n = 0, call_n = 0, *p;

p = a;

while (1)  {          //循环报数

if(*p == 0)  {    //如果健在

if (out_n == (N - 1))  break; //如果仅剩一人

call_n++;         //报数

call_n %= 3;      //最大为3,到了3就从0开始

if(call_n == 0) {*p = 1; out_n++;} //为0(即3)出局

}

p++;    if (p == a + N)  p = a;  //循环转向下一人

}

printf("最后剩余者的编号是:%d\n", p + 1 - a);

}//------------------完

==============================

围圈报数c语言编程,C语言编程:有n个人围成一圈,顺序排号。从第一个人开始报数......相关推荐

  1. 题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成

    题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到3报数),凡报到3的人退出圈子,问最后最后留下的是原来第几号的那位. 提示:用数组完成 #include <stdio.h> in ...

  2. 有n个人围一圈,顺序排号,报号游戏

    网上关于这个问题的解法已经有很多了,我现在是把网上的一些加上自己的理解,套用为一个固定写法,当然理解最重要啦! 我也是最近才开始学指针的,欢迎大家留言学习讨论 报数游戏的普遍说法: 有10个人围一圈, ...

  3. ACMNO.38 C语言-报数 有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

    题目描述 有n人围成一圈,顺序排号. 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子.`在这里插入代码片` 问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样 ...

  4. c语言报数问题程序,转圈报数问题(C语言):有n个人围成一圈,顺序排号……...

    问题描述: 有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. 题目分析: 这道题目是我们在日常生活中也能经常见到的一种报数小游戏.首 ...

  5. 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理)。——C语言

    1 概述 有n个人围成一圈,顺序排号.从第一个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下来的是原来的第几位(指针方法处理).--C语言 2 解法 //C程序设计第五版(谭浩强) / ...

  6. 转圈报数问题(C语言):有n个人围成一圈,顺序排号……

    问题描述: 有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号那位. 题目分析: 这道题目是我们在日常生活中也能经常见到的一种报数小游戏.首 ...

  7. (C语言)有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。

    题目描述 有n人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位. 输入 初始人数n 输出 最后一人的初始编号 样例输入 3 样例输出 2 ...

  8. 详细讲解C语言经典例题:有n个人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位

    有n个人围成一圈,顺序排号.从第1个人开始报数(从1到3报数),凡报到3的人退出圈子, 问最后留下的是原来第几号的那位 如题,相信很多人都和我一样,当时看到根本不知道从何下手.那么我们先不看代码,画图 ...

  9. C语言学习笔记——n个小孩围成一圈,顺序排号,报数报到5的出局...

    问题描述:n个小孩围成一圈,顺序排号,从第一个人开始报数(从1报到5),凡是报到5的都要出局,求最后留下的人的号码. #include<stdio.h> void Game(int n) ...

  10. C语言 | n个人围成一圈,顺序排号

    例77:n个人围成一圈,C语言进行顺序排号,要求用指针. 解题思路:从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的使原来第几号的那位. C语言源代码演示: #include&l ...

最新文章

  1. 神经网络基础及逻辑回归实现
  2. JavaScript 对象的遍历以及判断方法
  3. CMAKE_CURRENT_BINARY_DIR
  4. OSSIM中配置网络资产监控
  5. HDU 5371 Manacher Hotaru's problem
  6. CIKONSS-纯CSS实现的响应式Icon
  7. python的动态参数
  8. Gartner:克服SIEM部署失败的通病
  9. 阿里“10”年软件测试经验,面试官通常...........
  10. linux下ip地址转换整形,Linux中ip地址结构和ip地址的转换
  11. 如何在HTMl网页中插入百度地图
  12. Android架构纵横谈之——软件自愈能力(转载)
  13. Unity制作九宫格手机手势解锁密码
  14. BigDecimal.divide异常 ArithmeticException
  15. 听音测试电脑软件,主观听音测试
  16. Could not build url for endpoint ‘http://127.0.0.1:5000/ ‘.
  17. 计算机综合能力描述,计算机综合应用能力实训报告
  18. linux 应用层gpio中断_树莓派官方自带gpio中断驱动bcm2708_gpio.c原理分析 linux 中断架构 中断子系统...
  19. 第一次用gcc命令时报错:gcc: 未找到命令...
  20. Linux 文件系统只读

热门文章

  1. 关于集团高校宣讲流程
  2. 如何开发微信小程序(一)
  3. PLook——记录你的知识
  4. 有关Trojan-Downloader.Win32.QQHelper.**文件删除
  5. 文盘Rust -- 领域交互模式如何实现
  6. “中信碳账户”开户量突破350万,发布首支低碳生活主题音乐故事片
  7. 接线端子名PH,XH,ZH的区别
  8. myeclipse 自动退出后提示 “Problematic frame: C [libx...
  9. Excel对不等的合并单元格进行多列数据求和操作
  10. 7-1 藏尾诗 (20 分)