简单基础的C语言编程问题(虽然很简单但是对于我好难555)

来源:百度知道 编辑:UC知道 时间:2024/05/31 02:15:34
N(N<100)个人围成一圈,按顺序排号。从第一个人开始报数(从1到5报数),凡报到5的人退出圈子,问最后留下的是最初的第几号。用两种方法实现,一种是仅用数组实现,另一种用指向数组的指针实现。
请问有人可以提供思路吗???

用数组的
#include <stdio.h>
#define N 100
#define S 1
#define M 5
int p[100], n, s, m;

void Josegh(void)
{
int i, tmp;
for (i=0; i<n; i++)
p[i] = i+1;
s = s-1;
while (n > 1)
{
s = (s+m-1)%n;
tmp = p[s];
for (i=s+1; i<n; i++)
p[i-1] = p[i];
p[n-1] = tmp;
n--;
}
}
void main()
{
m = M;
n = N;
s = S;
Josegh();
}
数组指针:
#include <stdio.h>
main()
{
int i,k,m,n,num[50],*p:
printf("input number of person:");
scanf("%d",&n);
p=num;
for(i=0;i<n;i++)
*(p+i)=i+1;
i=0;
k=0;
m=0;
while(m<n-1)
{
if(*(p+i)!=0)
k++;
if(k==5)
{
*(p+i)=0;
k=0;
m++;
}
i++;
if(i==n)