您的位置:首页 > 编程语言 > C语言/C++

用C语言编写:有n个人围成一圈,顺序排号...

2014-04-21 00:00 337 查看
用C语言编写:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到m报数),凡报到m的人退出圈子,请输出报数出列圈及最后留下的数据和在原来位置的第几号?

要求如下:

(1)用函数来实现报数并退出

(2)要求使用指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <math.h>

int main(int argc, char **argv)
{
int n, m;
n = atoi(argv[1]);
m = atoi(argv[2]);
printf("n=%d, m=%d\n", n, m);

int *arr;
int i;

//创建一个n字节大小的数组
arr = (int *)malloc(n * sizeof(int));

for(i=0; i<n; i++)
{
arr[i] = 1;
}

for(i=0; i<n; i++)
printf("arr[%d] = %d\n", i, arr[i]);
int next = 1;
int index = 0;
int count = n;
//如果剩下的人数小于1,则报数完毕
while(count > 1)
{

//在剩下的人中继续报数
if(arr[index] == 1)
{

//从1报数到m的时候,T出去一个人
if(next == m)
{
arr[index] = 0;
--count;
next = 1;
printf("out num = %d\n", index);
}
else
next++;
}

++index;
if(index == n)
{
index = 0;
}
}
//查找到最后报数的人
for(i=0; i<n; i++)
{
if(arr[i] == 1)
{
printf("the last number = %d\n", i+1);
break;
}
}
//回收内存
free(arr);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐