UVa 133,发放救济金

UVa 133,发放救济金

沿用前一个题的思路:

用left记录剩下的点,直到全部选完。

这里我的问题是,我一直pos = (pos + f + n)%n,这里的问题是对于B点来说,开始的位置是1,就成了(1+(-1) +n) %n 是0,位置是从1开始记录的,所以应该是(pos  + f + n - 1) %n + 1;

#include <stdio.h>
#define maxn 25 int n,k,m;
int a[maxn]; int go (int pos ,int f,int t)
{
while(t--)
{
do {
pos = (pos+f+n-)%n+;
}while(a[pos]==);
}
return pos;
} int main()
{
while(scanf("%d%d%d",&n,&k,&m),n)
{
for(int i=;i<=n;i++)
a[i] = i; int pos1 = n;
int pos2 = ;
int left = n;
while(left)
{
pos1 = go(pos1,,k);
pos2 = go(pos2,-,m); printf("%3d",pos1);
a[pos1] = ;
left--;
if(pos1!=pos2)
{
printf("%3d",pos2);
a[pos2] = ;
left --;
}
if(left) printf(",");
}
puts("");
}
return ;
}
上一篇:CIMV2命名空间下的类的僵硬的说明


下一篇:spi子系统之驱动SSD1306 OLED