S1E35好像找到了比小甲鱼更简单的方法(没有输入队名版)
#include <stdio.h>#include <math.h>
void match(int i,int start,int end);
void match(int i,int start,int end)
{
int mid = (start + end) / 2;
int len = (mid - start + 1);
if (start == end - 1)
//找最近
{
printf(" %2d",i);
if (i % 2)
{
printf(" %2d ",i + 1);
}
else
{
printf(" %2d ",i - 1);
}
return ;
}
else
{
if (i > mid)
{
match(i,mid + 1,end);
match(i - len,start,mid);
}
else
{
match(i,start,mid);
match(i + len,mid + 1,end);
}
}
}
int main(void)
{
int n = 0;
printf("请输入要参赛的队伍数量:");
scanf("%d",&n);
if (n & n - 1)
{
printf("参数队伍的数量必须是2的N次方!\n");
return -1;
}
printf("编 号");
for (int i = 1;i < n;i++)
{
printf("第%d天",i);
}
putchar('\n');
for (int i = 1;i <= n;i++)
{
match(i,1,n);
putchar('\n');
}
return 0;
}
当然,10以后的排版有点问题,但结果是正确的,如有错误,希望各位鱼油指教!
页:
[1]