// 循环赛日程表#include#includeusingnamespace std;voidschedule(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;}}intmain(){int k;// 运动员的人数n=2^k
cout <<"运动员的人数为n(n=2^k),请输入k的值:";
cin >> k;int n =pow(2, k);// 运动员的人数n=2^kint** array =newint*[n +1];// 循环赛日程表for(int i =0; i < n +1; i++)
array[i]=newint[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;return0;}