循环赛日程表
来源:互联网 发布:java工程师证书有用吗 编辑:程序博客网 时间:2024/04/28 15:56
循环赛日程表
时限: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 <cstdio>using namespace std;int a[10000][10000];void table(int k, int n){ for(int i = 1; i <= n; i ++) { a[1][i] = i; } int m = 1; //每次填充起始位置 for(int s = 1; s <= k; s++) { n/=2; for(int t = 1; t <= n; t++) //分的块数 for(int i = m+1; i <= 2*m; i++) for(int j = m+1; j <= 2*m; j++) { a[i][j+(t-1)*m*2] = a[i-m][j+(t-1)*m*2-m]; //右下角的值等于左上角的值 a[i][j+(t-1)*m*2-m] = a[i-m][j+(t-1)*m*2]; //左下角的值等于右上角的值 //printf("i = %d\t j+(t-1)*m*2 = %d\t j+(t-1)*m*2-m = %d\t, i-m=%d\n", i, j+(t-1)*m*2, j+(t-1)*m*2-m, i-m); } m *= 2; //更新填充起始位置 }}int main(){ int k; cin >> k; int n = 1; for(int i = 1; i <= k; i++) n *= 2; table(k, n); for(int i = 1; i <= n; i ++) { for(int j = 1; j <= n; j ++) { printf("%d%c", a[i][j], j!=n?' ':'\n'); } } return 0;}
0 0
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- 循环赛日程表
- hibernate中的list,iterator,update,merge方法区分
- Android 中如何使用带有验证码的方式登陆
- 第十二周 项目4 -利用遍历思想求解图问题
- HDU2010_水仙花数
- 33-3-3
- 循环赛日程表
- 指针知识点
- Android之把sdcard中的MP3文件显示在界面上
- 动态规划——背包问题
- Maven 与 IntelliJ IDEA 的完美结合
- java中字符串或数字的对齐方式和输出所占用的宽度的问题
- 使用Eclipse构建Maven项目(一)
- 百度云通话记录自动删除脚本
- Atitit 颜色平均值cloor grb hsv模式的区别对比