用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;string
//建立一個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)
{io
//在剩下的人中繼續報數
if(arr[index] == 1)
{ast
//從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;
}gc