zoukankan      html  css  js  c++  java
  • 循环比赛日程表

    题目描述

    设有n个选手进行循环比赛,其中n = 2m,要求每名选手要与其他n - 1名选手都赛一次,每名选手每天比赛一次,循环赛共进行n - 1天,要求每天没有选手轮空。

    输入

    一行,包含一个正整数m。

    输出

    表格形式的比赛安排表(n行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

    #include<bits/stdc++.h>

    using namespace std;

    int n,a[1050][1050],yi=1;

    void tian()

    {

             int c=1,jih=2,ci=0,jil=1;

             while(c<n)

             {

                       for(int i=0;i<c;i++)

                       {

                                ci=0;jil=1;

                                while(jil<=n)

                                {

                                         if(ci==0)

                                         {

                                                   for(int j=0;j<c;j++)

                                                   {

                                                            a[i+jih][j+jil]=a[i+jih-c][j+jil+c];

                                                   }

                                                   jil+=c;

                                                   ci=1;

                                         }

                                         else

                                         {

                                                   for(int j=0;j<c;j++)

                                                   {

                                                            a[i+jih][j+jil]=a[i+jih-c][j+jil-c];

                                                   }

                                                   jil+=c;ci=0;

                                         }

                                }

                               

                       }

                       jih+=c;c*=2;

             }

    }

    int main()

    {

             cin>>n;

             n=(1<<n);

             for(int i=1;i<=n;i++)

             {

                       a[1][i]=i;

             }

             tian();

             for(int i=1;i<=n;i++)

             {

                       for(int j=1;j<=n;j++)

                       {

                                cout<<setw(3)<<a[i][j];

                       }

                       printf(" ");

             }

    }

    我写的暴力枚举法,没打找规律

    就这题耗了半个小时才写完

  • 相关阅读:
    hive之窗口函数
    linux环境下Mysql的卸载和重新安装和启动
    2017ACM暑期多校联合训练
    2017ACM暑期多校联合训练
    状态压缩dp
    铺砖问题 (状态压缩dp)
    POj 2104 K-th Number (分桶法+线段树)
    POJ 2991 Crane (线段树)
    4 Values whose Sum is 0 POJ 2785 (折半枚举)
    Billboard HDU 2795 (线段树)
  • 原文地址:https://www.cnblogs.com/fanhao050109/p/11191691.html
Copyright © 2011-2022 走看看