题目:初始选拔比赛,有n个厨师,每场比赛出席m人,胜利者和余下的人进行下一场比赛;
问最后决赛时的人数是否正好是m个人,一共办多少组比赛。
分析:数论。推公式即可。
设共有k+1场比赛,则每场比赛后剩下的人数为f(i):
f(1)= n - m + 1;
f(2)= n - 2m + 2;
...
f(k) = n - km + k = m;
f(k+1) = 1;
由f(k)得到公式 k = (n-m)/ (m-1),判断余数是否为零即可。
说明:写成读数据到文件结束就WA了。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int t, n, m;
scanf("%d",&t);
while (t --) {
scanf("%d%d",&n,&m);
if ((n-m)%(m-1) == 0) {
printf("%d\n",(n-m)/(m-1)+1);
}else {
puts("cannot do this");
}
}
return 0;
}