先写我的思路,没有用指针的做法。如果你用的是VC,把第六行去掉。

#include<stdio.h>
#include<stdlib.h> int main()
{
setvbuf(stdout,NULL,_IONBF,0);
int n,num; //n为总人数,num为剩余人数。
int a[255]={0}; //用0标记此位置有人,若此位置的人退出,则该位置的值为1
int i;
int flag=0; //flag为报数 printf("How many people?");
scanf("%d",&n);
num=n; //剩余人数初始为n while(num!=1) //剩余人数为1时,停止循环
{
for(i=0;i<n;i++)
{
if(a[i]==0) //若该位置有人,就报数
flag++;
if(flag==3) //若报数为3,此人退出
{
flag=0;
a[i]=1;
num--;
} }
} for(i=0;i<n;i++) //遍历数组,第一个值为0的位置处就是剩余的人了
{
if(a[i]==0)
{
printf("The remaining person is NO.%d.",i+1);
//数组的序号从0算起,而人的编号从1算起,所以有+1的修正
break;
}
}
return EXIT_SUCCESS;
}

参考答案的算法基本和我的差不多

区别有:

1 每个位置上刚开始赋值为每个人的编号1-n,有人退出后,该人的位置赋值为0;

2 把每个用数组形式表示的a[i]转换为*(p+i),p当然事先定义并赋值为p=a,不过这个区别不是很大哈。

最后一个循环可以用while来实现,很是简洁:

  i=0;

  while(a[i]==1)

    i++;

  printf("The remaining person is NO.%d.",i+1);

最新文章

  1. Sublime Text 技巧
  2. iOS第三方类库汇总【持续更新】
  3. poj1179
  4. Android源码分析--CircleImageView 源码详解
  5. KVC vs KVO(内容为转载记录,整合大家的总结为我所用)
  6. [Linux&amp;Vim]输入输出流
  7. AIR
  8. instancetype 和 id 的区别
  9. linux配置上网
  10. Redis 学习相关的网站
  11. 【webstorm使用手册】如何安装插件
  12. 微信支付errcode:40163,code been used,错误小结
  13. 监控zookeeper
  14. DjangoRestFramework 学习之restful规范 APIview 解析器组件 Postman等
  15. iOS 如何查看APP的jetsamEvent日志
  16. rabbit原理及项目应用
  17. DRF 视图和路由
  18. PythonStudy——列表类型 List type
  19. oracle项目代码
  20. HDU 2544 最短路 最短路问题

热门文章

  1. ios开发:Core Data概述
  2. AMQ学习笔记 - 01. 相关背景
  3. jQuery骨架
  4. Z-Stack学习笔记
  5. Ubuntu14.04 安装 PHP cURL
  6. 如何查看 Apache 的版本
  7. Android Material Design:滑动指示选项卡android.support.design.widget.TabLayout的简单使用
  8. Linux简史
  9. HTTP传递数据的几种方法
  10. wpf 仿QQ音乐歌词卡拉OK