精华内容
下载资源
问答
  • 循环日程表

    2020-11-25 11:58:19
    设有N个选手进行循环比赛,其中N=2的M次方​ ,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出格式: 输出:表格...

    设有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;
    int a[100][100];
    void match(int k)
    {
        int n, temp, i, j;
        n = 2;      //k=0两个参赛选手日程可以直接求得
        a[1][1] = 1;
        a[1][2] = 2;
        a[2][1] = 2;
        a[2][2] = 1;
        for (i = 1; i < k; i++) 
        {
            temp = n;
            n = n * 2;
            for (i = temp + 1; i <= n; i++)
                for (j = 1; j <= temp; j++)
                    a[i][j] = a[i - temp][j] + temp;
            for (i = 1; i <= temp; i++) 
                for (j = temp + 1; j <= n; j++)
                    a[i][j] = a[i + temp][(j + temp) % n];
            for (i = temp + 1; i <= n; i++) 
                for (j = temp + 1; j <= n; j++)
                    a[i][j] = a[i - temp][j - temp];
        }
        for (i = 1; i <= n; i++)
            for (j = 1; j <= n; j++)
            {
                cout  << a[i][j]<<" ";
                if (j == n)
                   cout<<endl;
            }
    }
    int main()
    {
        int k;
        cin >> k;
        k=pow(2, k);
        if (k != 0)
            match(k);
    }
    
    展开全文
  • C语言:循环日程表

    2021-10-26 16:48:17
    2.学会运用分治策略的思想解决实际问题(如:循环日程表)。 3.掌握使用分治策略思想解决实际问题。 二、【实验内容】 设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每...

    一、【实验目的及要求】

    1.掌握分治策略的基本思想。

    2.学会运用分治策略的思想解决实际问题(如:循环赛日程表)。

    3.掌握使用分治策略思想解决实际问题。

    二、实验内容】

    设计一个满足以下要求的比赛日程表:

    (1)每个选手必须与其他n-1个选手各赛一次;

    (2)每个选手一天只能赛一次;

     

    (3)循环赛一共进行n-1天。

    要求:对8个选手进行循环赛日程表的安排,并输出安排的方式截图,如下截图是当有2个和4个选手时,安排方式的输出。

           


    编译思路来源于:

    分治算法,循环比赛日程表,讲评_哔哩哔哩_bilibili分治算法,循环比赛日程表,讲评https://www.bilibili.com/video/BV1rp4y1X7mb?from=search&seid=7544630823193435744&spm_id_from=333.337.0.0


    代码:编译环境VS2019 

    #include<stdio.h>
    
    int a[100][100];
    int i, j, d,x,x1, x2, y, y1, y2;
    
    //延续长度;→
    void Yx_day(int x , int y , int d) {
    	for (i = x; i <= x + d - 1;i++) {
    		for (j = y; j <= y + d - 1; j++) {
    			a[i][j+d] = a[i][j]+d;
    		}
    	}
    }
    
    //复制到另一个正方形;
    void Jx_day(int x1, int y1, int d, int x2, int y2) {
    	for (int i = 0; i <= d - 1; i++) {
    		for (int j = 0; j <= d - 1; j++) {
    			a[x2 + i][y2 + j] = a[x1 + i][y1 + j];
    		}
    	}
    }
    
    void Pr_day(int x,int y,int d) {
    	for (i = 0; i < d; i++) {
    		for (j = 0; j < d; j++) {
    			printf("%4d",a[x+i][y+j]);
    		}
    		printf("\n\n");
    	}
    }
    
    int main() {
    	int k;
    	printf("输入k:");
    	scanf_s("%d", &k);
    	printf("\n");
    	d = 1;                            //初始延续
    	a[1][1] = 1;
    	for (int i = 0; i < k; i++) {
    		Yx_day(1, 1, d);              //延续长度;→
    		Jx_day(1, 1, d, 1 + d, 1 + d);//复制到另一个正方形;↘
    		Jx_day(1, 1 + d, d, 1 + d, 1);//复制到另一个正方形;↙
    		d = d * 2;                    //阶乘 n=2^k
    	}
    	Pr_day(1, 1, d);
    	return 0;
    }

    展开全文
  • 设有n=2^k个运动员要进行羽毛球循环赛,现要设计一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次。(2)每个选手一天只能比赛一次。 (3)循环赛一共需要进行n-1天。用分治法实现
  • 7-22 循环日程表

    2021-05-08 13:56:59
    7-22 循环日程表 设有N个选手进行循环比赛,其中N=2 ​M ​​ ,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出...

    7-22 循环日程表

    设有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>
    
    using namespace std;
    
    int a[200][200];
    void f(int x,int y,int c,int n){
        if(n==0){
            a[x][y]=c;
            return;
        }
        int h=1<<(n-1);
        f(x,y,c,n-1);
        f(x,y+h,c+h,n-1);
        f(x+h,y,c+h,n-1);
        f(x+h,y+h,c,n-1);
    }
    
    int main()
    {
        int m,n;
        cin>>m;
        n=1<<m;
        f(1,1,1,m);
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++){
                cout<<a[i][j]<<" ";
            }
            cout<<endl;
        }
        return 0;
    }
    
    展开全文
  • 循环日程表问题

    千次阅读 2016-05-31 14:10:50
    循环日程表问题 循环日程表问题。n=2kn=2^k个运动员进行网球循环赛,需要设计比赛日程表。每个选手必须与其他n−1n-1个选手各赛一次;每个选手一天只能赛一次;循环赛一共进行n−1n-1天。按此要求设计一张比赛日程...

    循环日程表问题

    循环日程表问题。 n=2k 个运动员进行网球循环赛,需要设计比赛日程表。每个选手必须与其他 n1 个选手各赛一次;每个选手一天只能赛一次;循环赛一共进行 n1 天。按此要求设计一张比赛日程表,该表有 n 行和n1列,第 i j列为第 i 个选手第j天遇到的选手。

    该问题和棋盘问题很像,都可以通过递归思想来解。

    递归三部曲
    划分问题:将 n=2k 个运动员划分为两组 n=2k1 个运动员。
    递归求解:递归填充 n=2k1 个运动员的日程表,填充方式见下面,递归出口为 n=1
    合并问题:该问题不需要合并。

    将日程表看做是一个 n=2kn=2k 的一个表格,先初始化 (0,0) 位置为 1 ,然后将日程表划分为n=2k1n=2k1这样的四个子表格,再按照如下方法填充。

    递归填充方式
    因为 (0,0) 初始化为 1 了,且每次填充都将其他子表格的左上子表格左上角预先填充了,所以左上子表格的左上角不需要填充。
    填充右下子表格的左上角为左上子表格的左上角值。
    填充右上子表格的左上角为左上子表格的左上角值加上子表格当前大小(边长)。
    同上条一样,填充左下子表格的左上角。
    填充完毕之后,再递归填充4个子表格,递归出口为 n=1

    填充一次后的日程表

    n=8 填充一次后的日程表

    循环日历表问题算法实现

    void circulateSchedule(int row, int column, int n) {
        // 递归出口
        if(n == 1) {
            return ;
        }
        // 将2^k*2^k的表格分成2^(k-1)*2^(k-1)的四个子表格
        int half = n / 2;
        // 每个表格的左上角赋值
        // 左上子表格等于右下子表格,右上子表格等于左下子表格
        // 右上子表格等于左上子表格加上子表格大小
        table[row + half][column + half] = table[row][column];
        table[row][column + half] = table[row + half][column] = table[row][column] + half;
        // 递归四个子表格
        circulateSchedule(row, column, half);
        circulateSchedule(row, column + half, half);
        circulateSchedule(row + half, column, half);
        circulateSchedule(row + half, column + half, half);
    }

    测试主程序

    #include <iostream>
    
    using namespace std;
    
    const int maxNum = 1 << 10;
    int table[maxNum][maxNum];
    
    void circulateSchedule(int row, int column, int n) {
        // 递归出口
        if(n == 1) {
            return ;
        }
        // 将2^k*2^k的表格分成2^(k-1)*2^(k-1)的四个子表格
        int half = n / 2;
        // 每个表格的左上角赋值
        // 左上子表格等于右下子表格,右上子表格等于左下子表格
        // 右上子表格等于左上子表格加上子表格大小
        table[row + half][column + half] = table[row][column];
        table[row][column + half] = table[row + half][column] = table[row][column] + half;
        // 递归四个子表格
        circulateSchedule(row, column, half);
        circulateSchedule(row, column + half, half);
        circulateSchedule(row + half, column, half);
        circulateSchedule(row + half, column + half, half);
    }
    
    int main() {
        // 选手个数,n=2^k
        int n;
        while(true) {
            cout << "请输入选手个数,0则退出程序:";
            cin >> n;
            if(!n) {
                break;
            }
    
            // 初始化(0,0)点
            table[0][0] = 1;
            // 生成循环日程表
            circulateSchedule(0, 0, n);
    
            // 输出表
            for(int i = 0; i < n; i++) {
                for(int j = 1; j < n; j++) {
                    cout << table[i][j] << "\t";
                }
                cout << endl << endl << endl;
            }
    
        }
        return 0;
    }

    输出数据

    请输入选手个数,0则退出程序:2
    2
    
    
    1
    
    
    请输入选手个数,0则退出程序:4
    2       3       4
    
    
    1       4       3
    
    
    4       1       2
    
    
    3       2       1
    
    
    请输入选手个数,0则退出程序:8
    2       3       4       5       6       7       8
    
    
    1       4       3       6       5       8       7
    
    
    4       1       2       7       8       5       6
    
    
    3       2       1       8       7       6       5
    
    
    6       7       8       1       2       3       4
    
    
    5       8       7       2       1       4       3
    
    
    8       5       6       3       4       1       2
    
    
    7       6       5       4       3       2       1
    
    
    请输入选手个数,0则退出程序:0
    
    Process returned 0 (0x0)   execution time : 27.790 s
    Press any key to continue.
    展开全文
  • 7-5 循环日程表 (10 分)

    2021-11-06 17:15:48
    7-5 循环日程表 (10 分) 设有N个选手进行循环比赛,其中N=2^M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出...
  • 7-5 循环日程表 (10分)

    2020-12-18 10:51:57
    设有N个选手进行循环比赛,其中N=2​M​​,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出格式: 输出:表格形式...
  • 循环日程表

    2014-04-28 20:13:37
    循环日程表的程序,可以使用于比赛队数任意的情况,不局限于偶数之队伍 是我认识的一个大神实现的代码
  • 7-15 循环日程表 (10分)

    2020-11-27 23:21:13
    设有N个选手进行循环比赛,其中N=2​^M​​,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7) 输出格式: 输出:表格形式的...
  • 递归-PTA循环日程表

    2020-11-21 13:23:59
    设有N个选手进行循环比赛,其中N=2^M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出格式: 输出:表格形式的比赛...
  • //Purpose:循环日程表 #include &amp;amp;amp;lt;iostream&amp;amp;amp;gt; using namespace std; void copy_dataTime(int, int**); void recursive_arrangement(int**,int); void print_data...
  • 描述、算法正确性证明、算法分析、算法实现与测试),针对循环日程表算法从实践中理解 分治法的思想、求解策略及步骤。 实验目的 理解分治法的核心思想以及分治法求解过程 从算法分析与设计的角度,对快速...
  • 设有N个选手进行循环比赛,其中N=2​M​​,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出格式: 输出:表格...
  • 热心学姐来送福利啦哈哈哈哈哈哈哈哈哈哈哈哈哈,西北农林科技大学的算法分析实验报告,
  • 设有N个选手进行循环比赛,其中N=2​M​​,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出格式: 输出:表格形式...
  • 解题思路:根据题目2^k可以考虑尝试分治法,观察k...问题大意:设有n=2^k个选手参加循环赛,要求设计一个满足以下要求比赛日程表: 1)每个选手必须与其它n-1个选手各赛一次; 2)每个选手一天只能赛一次。 #i...
  • 循环日程表 (分治法)

    2020-10-12 19:44:28
    设有N个选手进行循环比赛,其中N=2^M ,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。 输入格式: 输入:M(M<=7)。 输出格式: 输出:表格形式的...
  • 笔者用5中方法解决循环日程表问题。 一、n=2^k,采用递归,指针数组解决,左上角和左下角填充,剩下的copy。 二、n=2^k,采用递归,指针数组解决,左上角填充,剩下的copy。 三、n为任意数,采用递归,指针数组...
  • 循环日程表算法

    2012-03-20 22:22:53
    赛程表安排问题,有2的k次方(n)支球队,在n-1天两两比赛,每支球队每天只进行一场比赛,求安排日程表。资源是Java实现的算法。
  • 循环日程表问题

    2021-02-10 08:39:22
    最近在学习算法分析与设计这门课时,遇到了循环日程表问题。我感觉课本上的方法并不是很好(浪费空间而又不好理解),而网上流传的代码也基本和课本上类似,于是我决定用自己的方式来实现这个算法。目录问题描述设有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,082
精华内容 4,432
关键字:

循环日程表

友情链接: Lagrange插值.rar