算法思想:
1.给每一个人编号(用数组的形式),即每一数组有一个值
2.循环遍历(直到当前只剩下1个不为0的值,退出循环):用变量k(1~3)循环递增,当变量递增为k=3时,令该数组值为0
3.输出不为0编号
#include <stdio.h>
void main()
{
void solve(int *arr,int n);
void print(int *arr,int n);
int a[100];
int n,i;
printf("input N:");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
*(a+i) = i ;
}
solve(a,n);
print(a,n);
}
void solve(int *arr,int n)
{
int i,k,j=n;
for(i=1;j>1;i++)
{
if(*(arr+i)!=0)
{ k++;
if(k%3==0)
{
*(arr+i) = 0;
j--;
k=0;
}
}
if(i==n)
{
i=0;
}
}
}
void print(int *arr,int n)
{
int i;
printf("The last number:");
for(i=1;i<=n;i++)
{
if(*(arr+i)!=0)
{
printf("%d ",*(arr+i));
}
}
}
运行结果:
input N:8
The last number:7