|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
arrange函数在下面调用自身的时候,num 再次等于2,不是应该继续 if 中的语句,为什么只执行了一次,就继续后面的了?
- #include <stdio.h>
- #define MAX_NUM 64
- int schedule[MAX_NUM+1][MAX_NUM+1];
- int arrange(int begin, int num);
- int arrange(int begin, int num)
- {
- int i, j;
- if (num == 2)
- {
- schedule[begin][1] = begin;
- schedule[begin][2] = begin + 1;
- schedule[begin+1][1] = begin + 1;
- schedule[begin+1][2] = begin;
- return 0;
- }
- arrange(begin, num/2);
- arrange(begin + num/2, num/2);
- for (i = begin + num/2; i < begin + num; i++)
- {
- for (j = num/2 + 1; j <= num; j++)
- {
- schedule[i][j] = schedule[i-num/2][j-num/2];
- }
- }
- for (i = begin; i < begin + num/2; i++)
- {
- for (j = num/2 + 1; j <= num; j++)
- {
- schedule[i][j] = schedule[i+num/2][j-num/2];
- }
- }
- }
- int main(void)
- {
- int num, i, j;
- printf("请输入参赛的队伍数量:");
- scanf("%d", &num);
- // 检查num是否2的N次方
- // 注意,这里是&,不是&&
- // &是按位与操作,1&1==1,0&1==0,0&0 == 0
- if (num & num - 1)
- {
- printf("参数队伍的数量必须是2的N次方!\n");
- return -1;
- }
- arrange(1, num);
- printf("编 号");
- for (i = 1; i < num; i++)
- {
- printf("\t第%d天", i);
- }
- putchar('\n');
- for (i = 1; i <= num; i++)
- {
- for (j = 1; j <= num; j++)
- {
- printf("%3d\t", schedule[i][j]);
- }
- putchar('\n');
- }
- return 0;
- }
复制代码 |
|