题目:有n个人围成一圈,顺序排号,从第一个开始报数(从1到num报数),凡报到num的人退出圈子,问最后最后留下的是原来第几号的那位.
/*
*Filename: count_num_game.h
*Author :
*Description:
*/
#ifndef COUNT_THREE_H
#define COUNT_THREE_H
#define MAXSIZE 512 //定义最大参与人数
/*
*Name: Sequence()
*Function: 实现将所有参与者进行编号
*Arguements: 第一个参数是由所有参与者编号后所组成的数组,
第二个参数是参与的总人数
*/
void Sequence(int *person,int person_num);
/*
*Name: Locate()
*Function: 将最终剩下的人员定位到是原来的第几个
*Arguements: 第一个参数是由所有参与者编号后所组成的数组,
第二个参数是参与的总人数
第三个参数是需要报的数,比如报3出局
*Returnvalue: 成功返回表示位置
*/
int Locate(int *person,int person_num,int out_num);
#endif
/*
*Filename: count_num_game.c
*Author :
*Description:
*/
#include "count_num_game.h"
#include <stdio.h>
/*
*Name: Sequence()
*Function: 实现将所有参与者进行编号
*Arguements: 第一个参数是由所有参与者编号后所组成的数组,
第二个参数是参与的总人数
*/
void Sequence(int *person,int person_num)
{
int i;
for(i = 0;i < person_num;i ++)
{
//对参与者进行编号
*(person + i) = i + 1;
}
}
/*
*Name: Locate()
*Function: 将最终剩下的人员定位到是原来的第几个
*Arguements: 第一个参数是由所有参与者编号后所组成的数组,
第二个参数是参与的总人数
第三个参数是需要报的数,比如报3出局
*Returnvalue: 成功返回位置
*/
int Locate(int *person,int person_num,int out_num)
{
//记录出局的总人数
int total_out = 0;
//计数变量
int count = 0;
int i = 0;
while(total_out < person_num - 1)
{
if(*(person + i)!= 0) //i从0开始,若该位置成员已经被置0,表明离开,不参见计数,跳过此步
{
count ++; //k开始计数
}
//当正好计数到需要出局的数时
if(count == out_num)
{
//对该位置0,且把计数变量置0,出局总人数自增
person[i] = 0;
count = 0;
total_out ++;
}
i ++;
//到结尾处,调至开始处
if(i == person_num )
{
i = 0;
}
}
return 0;
}
*Filename: main.c
*Author :
*Description:
*/
#include <stdio.h>
#include <stdlib.h>
#include "count_num_game.h"
int main(int argc,char *argv[])
{
int i = 0;
int out_num; //需要报的号码
int person_num =0;
int person[MAXSIZE]; //定义最大容量为MAXSIZE的数组
if(3 != argc)
{
printf("Warning:./test <person's num> <need out num>\n");
return -1;
}
person_num = atoi(argv[1]); //从命令行接收总人数
out_num = atoi(argv[2]); //从命令行接收需要报的数
printf("The total person's num is %d\n",person_num);
printf("The count number is %d\n",out_num); //输出提示信息
Sequence(person,person_num); //进行编号
Locate(person,person_num,out_num); //进行定位
#if 0
while(*(person + i) == 0)
{
i ++;
}
#endif
while(person[i] == 0)
{
//printf("%d\n",person[i]);
i ++;
}
printf("The last person is Num: %d\n",*(person + i));
return 0;
}