#include <stdio.h>
#define N 5 //指定一群中的人数
int main()
{
int i,k;
int a[N+1],*p;
//循环赋值
for(i = 0,p = a;p <= a+N;i++,p++)
{
*p=i;
}
p = a + 1;
for(i = 0,k = N;k > 1;p++)
{
//指向末尾后从头指
if(p > (a + N))
{
p = a + 1;
}
//跳过数组中赋0的元素
if(*p != 0)
{
i++;
}
if((i - 3) == 0)
{
*p = 0;
i = 0;
k--;
}
}
for(i = 1;i <= N;i++)
{
if(a[i] != 0)
{
printf("The rest num is %d\n",a[i]);
}
}
return 0;
}
#define N 5 //指定一群中的人数
int main()
{
int i,k;
int a[N+1],*p;
//循环赋值
for(i = 0,p = a;p <= a+N;i++,p++)
{
*p=i;
}
p = a + 1;
for(i = 0,k = N;k > 1;p++)
{
//指向末尾后从头指
if(p > (a + N))
{
p = a + 1;
}
//跳过数组中赋0的元素
if(*p != 0)
{
i++;
}
if((i - 3) == 0)
{
*p = 0;
i = 0;
k--;
}
}
for(i = 1;i <= N;i++)
{
if(a[i] != 0)
{
printf("The rest num is %d\n",a[i]);
}
}
return 0;
}
本文介绍了一个使用C语言实现的约瑟夫环问题解决方案。通过定义数组和指针操作来模拟环形结构,该程序能够计算并输出特定淘汰规则下最后剩下的成员编号。适合初学者理解指针及数组的运用。
1360

被折叠的 条评论
为什么被折叠?



