admin 管理员组文章数量: 1087817
PTA 6 循环日程表
问题:
设有N个选手进行循环比赛,其中N=2^M ,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。
输入格式:
输入:M(M<=7)。
输出格式:
输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。
输入样例:
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
说明,第一行为:1 2 3 4 5 6 7 8,1表示本行都是1号选手和其他选手的比赛,如第2个数为2(其下标可以看成1)表示第一天1号和2号比赛,第5个数为5(其下标可以看成4),表示1号和5号在第4天比赛。
分析:
源代码:
#include <iostream>
#include <math.h>
using namespace std;
#define N 128//递归函数
void arrange(int p, int q, int t, int arr[N][N]) {//规格为4及以上,它的左上角和右上角要递归if (t >= 4) {arrange(p, q, t / 2, arr);arrange(p, q + t / 2, t / 2, arr);}//填左下角for (int i = p + t / 2; i < p + t; i++) {for (int j = q; j < q + t / 2; j++) {arr[i][j] = arr[i - t / 2][j + t / 2];}}//填右下角 for (int i = p + t / 2; i < p + t; i++) {for (int j = q + t / 2; j < q + t; j++) {arr[i][j] = arr[i - t / 2][j - t / 2];}}}int main() {int n,m;int arr[N][N];cin >> m;n =(int) pow (2, m);//2的m次方//初始化第一行for (int i = 0; i < n; i++) {arr[0][i] = i + 1; }//递归 arrange(0, 0, n, arr);//打印输出循环赛日程表 for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << arr[i][j] << " ";}cout << endl;}return 0;
}
本文标签: PTA 6 循环日程表
版权声明:本文标题:PTA 6 循环日程表 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1687417505a100256.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论