#include <stdio.h>
#include <stdlib.h>
void soldier(int s[], int n)
{
int i, j;
int m;
m = n;
int k = 2;
while(m > 3)
{
j = 1;
for(i = 0; i < n; i++)
{
if(s[i] == 0)
{
if( j % k == 0)
{
s[i] = 1;
m--;
}
j++;
}
}
k = (k > 2 ? 2 : 3);
}
}
int main()
{
int n;
int num;
int i ,j;
while(scanf("%d", &n) == 1)
{
for(i = 0; i < n ; i++)
{
scanf("%d", &num);
int * s = (int *)calloc(num, sizeof(int));
soldier(s, num);
for(j = 0; j < num; j++)
{
if(s[j] == 0)
{
if(j == 0) printf("%d", j+1);
else printf(" %d", j+1);
}
}
printf("\n");
}
}
return 0;
}
1023 士兵队列训练问题
最新推荐文章于 2025-03-30 14:36:35 发布
本文介绍了一个名为'soldier'的算法实现,该算法通过特定规则筛选数组中的元素,最终输出符合条件的士兵站位序列。主要关注点在于使用C语言如何通过循环和条件判断来逐步减少数组中满足条件的元素。
1447

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



