循环赛日程表
循环赛日程表
时限:1000ms 内存限制:10000K 总时限:3000ms
描述
用分治算法生成循环赛日程表(1到2的n次方个人)
输入
一个整数n
输出
循环赛日程表(1到2的n次方个人)
输入样例
3
输出样例
1 2 3 4 5 6 7 8
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1
2 1 4 3 6 5 8 7
3 4 1 2 7 8 5 6
4 3 2 1 8 7 6 5
5 6 7 8 1 2 3 4
6 5 8 7 2 1 4 3
7 8 5 6 3 4 1 2
8 7 6 5 4 3 2 1
#include <iostream>
#include <math.h>
using namespace std;
static int data[129][129];
void Merge(int num)
{
for(int i = 1;i <= num/2; i++)
for(int j = 1;j <= num/2; j++)
{
data[i][j+num/2] = data[i][j]+(num/2); //正右方填充
data[i+num/2][j] = data[i][j]+(num/2); //正下方填充
data[i+num/2][j+num/2] = data[i][j]; //右下方填充
}
}
void Manage(int num,int n) //num表示方阵的大小,n表示迭代的层次
{
if(n==0)
{
data[1][1] = 1;
}
else
{
Manage(num/2,n-1);
Merge(num);
}
}
void Show(int num)
{
for(int i = 1;i <= num/2; i++)
{
for(int j = 1;j <= num/2; j++)
cout<<data[i][j]<<" ";
cout<<endl;
}
}
int main()
{
int n,num;
cin>>n;
n++;
num = powl(2,n);
Manage(num,n);
Show(num);
return 0;
}
态度决定高度,细节决定成败,

浙公网安备 33010602011771号