【题目描述】
设有NN个选手进行循环比赛,其中N=2M2M,要求每名选手要与其他N−1N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1N−1天,要求每天没有选手轮空。
【输入】
输入:M。
【输出】
输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。
【输入样例】
3
【输出样例】
1 2 3 4 5 6 7 82 1 4 3 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 46 5 8 7 2 1 4 37 8 5 6 3 4 1 28 7 6 5 4 3 2 1
#include <bits/stdc++.h>#define maxn 105#define INF 99999999using namespace std;int mp[maxn][maxn];int main(){int n,m,k=1,half=1;cin>>m;n=1<<m;mp[1][1]=1;while(k<=m){for(int i=1; i<=half; i++){for(int j=1; j<=half; j++){mp[i][j+half]=mp[i][j]+half;}}for(int i=1; i<=half; i++){for(int j=1; j<=half; j++){mp[i+half][j]=mp[i][j+half];mp[i+half][j+half]=mp[i][j];}}half*=2;k++;}for(int i=1; i<=n; i++){int f=1;for(int j=1; j<=n; j++){if(f)f=0;elsecout<<" ";cout<<mp[i][j];}cout<<endl;}return 0;}
如果觉得《循环赛日程表------分治算法》对你有帮助,请点赞、收藏,并留下你的观点哦!