信息技术学科教研
当前登录用户:
最新信息
  • 通知公告
  • 新闻列表
  • 新闻列表2
  • sjfakl












































    分治算法比赛题目题解

    编辑发布:webdc   时间:2018/9/11 0:53:47   访问量:2150  评论条:      6

    题目描述】

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

    【输入】

    输入:M。

    【输出】

    输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。

    【输入样例】

    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

    先初始化为a[0][0]

    一本通书上原理

     

    右上等左方阵加一半

    等右上方方阵

    等左上方阵

    代码书上有

     

     

    解题报告2

    和差不多

     

    右上等左方阵加一半

    左下等左方阵加一半

    等左上方阵

    核心代码

    //填写右下角

        int i,j;

        for(i=0;i<M;i++)

            for(j =0;j<M;j++)

            a[i+M][j+M]=a[i][j];

        //填写右上角左下角

        for(i=0;i<M;i++)

            for(j =0;j<M;j++)

            a[i+M][j]=a[i][j+M]=a[i][j]+M;

    //完善代码

    #include<iostream>

    using namespace std;

    int b[10005][10005];

    int f(int a[10005][10005],int M)

    {

        //填写右下角

        int i,j;

        for(i=0;i<M;i++)

            for(j =0;j<M;j++)

            a[i+M][j+M]=a[i][j];

        //填写右上角左下角

        for(i=0;i<M;i++)

            for(j =0;j<M;j++)

            a[i+M][j]=a[i][j+M]=a[i][j]+M;

    }

    int p(int a[10005][10005],int M)

    {

     

        int i,j;

         for(i=0;i<M;i++)

         {

             for(j =0;j<M;j++)

                cout<<a[i][j]<<" ";

            cout<<endl;

         }

    }

     

    int main()

    {

        int i,j,N,a;

        cin>>a;

        N=1<<a;

       // cout<<;

        //int c[N];

        b[0][0]=1;

        for(i=1;i<=N/2;i*=2)

            f(b,i);

        p(b,N);

        return 0;

    }

     

     

     

    解题报告3

    规律也容易看出来

    初始化

    0 行 1 2 3 。。。N

    1 奇偶交换1 2 1 4 3… N N-1

    2 交换连续两个位置

    4、奇偶交换

    5、交换连续四个位置

    6、奇偶交换

    7、交换连续两个位置

    8、奇偶交换

    9、交换连续8个位置

    10 奇偶交换

    11 交换连续两个位置

    12奇偶交换

    13 交换连续4个位置

    14、奇偶交换

    15、交换连续2个位置

    16、奇偶交换

    17、交换连续16个位置

    特别提醒交换连接的N个位置是以前N行的顺序为参考

     

     

     

     

     

    序号

    规律

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

     

    0

    0

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

     

    1

    0

    2

    1

    4

    3

    6

    5

    8

    7

    10

    9

    12

    11

    14

    13

    16

    15

     

    2

    2

    3

    4

    1

    2

    7

    8

    5

    6

    11

    12

    9

    10

    15

    16

    13

    14

     

    3

    0

    4

    3

    2

    1

    8

    7

    6

    5

    12

    11

    10

    9

    16

    15

    14

    13

     

    4

    4

    5

    6

    7

    8

    1

    2

    3

    4

    13

    14

    15

    16

    9

    10

    11

    12

     

    5

    0

    6

    5

    8

    7

    2

    1

    4

    3

    14

    13

    16

    15

    10

    9

    12

    11

     

    6

    2

    7

    8

    5

    6

    3

    4

    1

    2

    15

    16

    13

    14

    11

    12

    9

    10

     

    7

    0

    8

    7

    6

    5

    4

    3

    2

    1

    16

    15

    14

    13

    12

    11

    10

    9

     

    8

    8

    9

    10

    11

    12

    13

    14

    15

    16

    1

    2

    3

    4

    5

    6

    7

    8

     

    9

    0

    10

    9

    12

    11

    14

    13

    16

    15

    2

    1

    4

    3

    6

    5

    8

    7

     

    10

    2

    11

    12

    9

    10

    15

    16

    13

    14

    3

    4

    1

    2

    7

    8

    5

    6

     

    11

    0

    12

    11

    10

    9

    16

    15

    14

    13

    4

    3

    2

    1

    8

    7

    6

    5

     

    12

    4

    13

    14

    15

    16

    9

    10

    11

    12

    5

    6

    7

    8

    1

    2

    3

    4

     

    13

    0

    14

    13

    16

    15

    10

    9

    12

    11

    6

    5

    8

    7

    2

    1

    4

    3

     

    14

    2

    15

    16

    13

    14

    11

    12

    9

    10

    7

    8

    5

    6

    3

    4

    1

    2

     

    15

    0

    16

    15

    14

    13

    12

    11

    10

    9

    8

    7

    6

    5

    4

    3

    2

    1

     

    16

    16

                                     

    AC代码如下:

    #include<iostream>

    #include<cmath>

    using namespace std;

    int b[10005][10005];

    //奇偶交换

    int px(int a[10005][10005],int M,int row)

    {

        int i,j,t;

        for(i=1;i<M;i+=2)

        {

           a[row][i-1]=a[row-1][i];

           a[row][i]=a[row-1][i-1];

        }

     

    }

    //输出二维数据

    int p(int a[10005][10005],int M)

    {

     

       int i,j;

         for(i=0;i<M;i++)

         {

             for(j =0;j<M;j++)

                cout<<a[i][j]<<" ";

            cout<<endl;

         }

    }

    //初始化1-N二维数组第0行代码

    int ps(int a[10005][10005],int M,int r)

    {

     

        int i,j;

         for(i=0;i<M;i++)

         a[r][i]=i+1;

    }

    //核心代码

    //连续交换N个位置是以前N行为参考依据,old为前N行,

    //now为当前要填充连续交换N位置,这时用m来代表连续交换m个数

    int fx(int a[10005][10005],int N,int m,int old,int now)

    {

     

        int i,j,t;

        for(i =0;i<N;i+=2*m)//以m为中心左右交换

        {

            j=i;

            while(j<m+i)

            {

                a[now][j+m]=a[old][j];

                a[now][j]=a[old][j+m];

                j++;

            }

        }

    }

     

    //能被2整除的次数

    //连续交换次数的判断,规律不好总结,也是种解题的难度之一

    int ftwo(int a)

    {

        int t =0;

        while(a%2==0)

        {

            a/=2;

            t++;

        }

        if(t==0)

            return 0;

        else return pow(2,t);

    }

    int main()

    {

        int i,j,N,a;

        cin>>a;

        N=1<<a;

       // cout<<;

        //int c[N];

       ps(b,N,0);

       // for(i=1;i<=N/2;i*=2)

        //    f(b,i);

        for(i = 1;i<N;i++)

        {

            int t = ftwo(i);//交换数量

            if(t==0)

            px(b,N,i);//<<endl;

           else

            fx(b,N,t,i-t,i);

        }

     

         p(b,N);

        return 0;

    }

    分治算法比赛题目题解.docx

    2024家长会2024/11/16 9:02:24
    杨易校长在2023年春季家长会上的讲话.mp42023/5/13 20:03:04
    学生用户-用户手册.pdf2022/9/13 18:00:43
    2022年秋季学期普通高中助学申请工作通知2022092022/9/12 21:38:36
    省招生委员会关于做好2022年民汉双语招生工作的通知.pdf2022/5/25 15:38:44
    贵州省普通高中学业水平合格性考试信息技术学科考试说明(试行).pdf2022/5/24 11:20:23
    信息系统项目22022/3/8 11:25:20
    信息系统与信息社会项目12022/3/1 15:29:37
    省招生委员会关于做好2022年高职(专科)分类考试招生工作的通知.pdf2022/2/14 15:47:29
    账号查询2021/12/20 22:40:01
    2021年普法网址2021/12/20 22:39:09
    高一新高考选科系统2021/12/2 17:08:28
    黔招委[2021]26号省招生委员会关于做好2022年普通高等学校考试招生报名工作的通知.pdf2021/11/15 15:11:08
    2021.11健康问卷2021/11/7 16:54:10
    2021.11心理问卷2021/11/7 16:52:02
    问卷2021/11/4 18:55:58
    高考报名2021-112021/11/1 16:09:39
    2021年贵州省教师教学技能大赛-第四届(2021)中小学教师微课应用暨竞赛活动的通知2021/9/8 11:47:05
    #输入三个数求最大值2019/9/5 11:50:44
    18微课学生帐号及密码2019/9/1 8:08:52
    二维码扫描app官方版 v3.2.5安卓版2019/9/1 6:34:42
    162019/8/31 19:21:35
    作业42019/8/11 14:04:10
    作业32019/8/9 17:24:05
    偶数2-N.mp42019/8/5 19:21:47
    流程图while输出1-N.mp42019/8/5 19:21:10
    输入N个数求它们的最大值2019/8/5 14:46:52
    输入三个数求最大值.mp42019/8/5 13:34:53
    作业12019/8/5 11:29:06
    NOIP信息网-金牌教练董永建老师公益讲座.mp42019/8/4 21:02:41
    清北学堂讲座二.mp42019/8/4 17:08:34
    清北学堂讲座三.mp42019/8/4 17:08:00
    清北学堂讲座四.mp42019/8/4 17:07:22
    清北学堂讲座五.mp42019/8/4 17:06:46
    清北学堂讲座六.mp42019/8/4 17:06:10
    清北学堂讲座七.mp42019/8/4 17:05:11
    清北学堂讲座八.mp42019/8/3 20:10:14
    贵州2019高校招生录取时间安排一览2019/7/2 13:15:39
    志愿设置.mp42019/6/27 13:38:09
    如何选择院校和专业.mp42019/6/27 13:37:40
    如何理解平行志愿.mp42019/6/27 13:37:00
    什么是梯度志愿2019/6/27 13:36:13
    录取批次顺序.mp42019/6/27 13:35:28
    志愿填报安全提示.mp42019/6/27 13:34:30
    【回看第一场】专家杨绍先教你填志愿2019/6/27 12:16:16
    【回看第二场】专家赵发毅教你填志愿2019/6/27 11:10:06
    【回看第三场】专家何厚波教你填志愿2019/6/27 10:56:16
    python编程之选择语句2019/5/24 10:00:19
    省名校长、名师工作室乡村工作站挂牌仪式暨培训活动举行2019/4/16 14:40:25
    我组开展信息技术竞赛2019/4/3 18:51:47
    关于做好2019年5月普通高中学生信息技术学科学业水平考试报名工作的通知2019/4/3 10:46:24
    高二信息课课外安排表2019/3/14 14:56:13
    考试1.262019/1/26 6:53:58
    1418题目描述-猴子选大王2019/1/22 15:35:30
    信息学寒假培训通知2019/1/8 16:18:18
    网络技术应用电子书4-2-3.pd2018/12/26 11:23:48
    4.1网站规划2018/12/20 14:46:47
    动态规划基础12018/12/2 16:11:59
    动态规划基础2018/12/2 8:24:26
    4.1规划网站2018/11/20 15:21:03
    3.3网络的规划设计2018/11/15 11:27:29
    NOI LINUX Arbiter测评系统2018/11/5 1:57:37
    学生端安装虚拟NOI LINUX实现一机两用2018/11/5 1:57:08
    解题报告201811042018/11/5 1:54:02
    金币2018/10/23 17:52:42
    问题求解2018/10/10 17:05:57
    10.10信息学考试2018/10/9 22:42:18
    初赛真题2018/10/9 17:36:04
    10月8日信息学考试2018/10/8 15:16:09
    2018年10月07日上机考试题2018/10/7 13:12:09
    矩阵上下左右2018/10/6 17:04:58
    杨辉三角2018/10/6 11:35:08
    C++语言基础2018/10/6 10:16:58
    初赛题卡模板2018/10/5 22:12:23
    10.4信息学考试2018/10/4 19:18:39
    2018信息学初赛知识点2018/10/4 0:57:21
    第三部分 数据结构2018/9/20 19:19:27
    基础算法2018/9/20 19:16:58
    第一部分 语言C++2018/9/17 9:45:31
    2015-2017提高组2018/9/17 6:29:55
    2010-2017普及组初赛试题2018/9/17 6:27:24
    初赛模拟题20152018/9/16 2:26:39
    计算机基础知识100题2018/9/12 0:58:14
    关于举办2018年全国青少年信息学奥林匹克联赛通知2018/9/12 0:08:43
    C++初学培训2018/9/11 2:07:06
    分治算法比赛题目题解2018/9/11 0:53:47
    兴趣班问卷网址2018/9/10 11:10:48
    第1章 计算机基础知识2018/9/8 16:45:39
    信息学一本通刷题网站2018/9/4 13:39:55
    广东实验中学信息学奥赛评测系统2018/9/4 13:38:31
    CodeBlock编程软件2018/9/4 13:36:06
    2018年全市信息技术优质课评选活动获奖情况2018/8/9 19:41:00
    new lists
    设计中
    你已经上传的作业
    序号 用户名 上传时间 作业链接
    上传作业 
     
    设计中
    设计中
    设计中
    设计中
    设计中
    设计中
    你的基本信息
    用户名: 
    密码:
    确认密码: 
    姓名:  
    手机号:
    性别:
    族别:
    出生年月: 2000-10-10
    身份证号:
    年级:
    班级:
    电子邮箱 460608764@qq.com