demo2_简单的报数游戏

来源:互联网 发布:linux ftp命令用法 编辑:程序博客网 时间:2024/06/06 04:54

题目:有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;
}






测试结果:


原创粉丝点击