// 循环赛日程表
#include<iostream>
#include<cmath>
using namespace std;
void schedule(int k, int n, int** array) // 数组下标从1开始
{
for (int i = 1; i <= n; i++) // 第一行排1-n
array[1][i] = i;
int m = 1; // 用来控制每一次填表时i行j列的起始填充位置
for (int s = 1; s <= k; s++) // k指分成k大部分进行填充日程表;s指第几大部分
{
n = n / 2;
for (int t = 1; t <= n; t++) // 第s部分内的循环
{
for (int i = m + 1; i <= 2 * m; i++) // 行
{
for (int j = m + 1; j <= 2 * m; j++) // 列
{
array[i][j + (t - 1) * m * 2] = array[i - m][j + (t - 1) * m * 2 - m]; //左上角等于右下角的值
array[i][j + (t - 1) * m * 2 - m] = array[i - m][j + (t - 1) * m * 2]; //左下角等于右上角的值
}
}
}
m *= 2;
}
}
int main()
{
int k; // 运动员的人数n=2^k
cout << "运动员的人数为n(n=2^k),请输入k的值:";
cin >> k;
int n = pow(2, k); // 运动员的人数n=2^k
int** array = new int* [n + 1]; // 循环赛日程表
for (int i = 0; i < n + 1; i++)
array[i] = new int[n + 1];
// 填充日程表
schedule(k, n, array);
// 输出日程表
cout << "\n循环赛日程表为:\n";
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
cout << array[i][j] << " ";
cout << "\n";
}
// 删除二维数组
for (int i = 0; i < n + 1; i++)
delete[] array[i];
delete[] array;
return 0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务