試題 演算法訓練 比賽安排 藍橋杯

2021-10-03 16:03:20 字數 1857 閱讀 8497

題目描述:

資源限制

時間限制:1.0s 記憶體限制:512.0mb

問題描述

設有有2 n(n<=6)個球隊進行單迴圈比賽,計畫在2 n – 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n – 1天內每個隊都與不同的對手比賽。

輸入格式

輸入檔案matchplan.in共一行,輸入n的數值。

輸出格式

輸出檔案matchplan.out共(2 n – 1)行,第i行輸出第i天的比賽安排。

格式為:a-b,c-d,……。其中i是天數,a,b分別為比賽雙方的編號,每行共2 n-1個比賽場次。

樣例輸入

2樣例輸出

<1>1-2,3-4

<2>1-3,2-4

<3>1-4,2-3

解題思路:

用二維陣列的索引位置表示隊員的標號,待安排的隊員陣列的數值為置為1,其他都置為0;那麼接下來要安排的就是那些二維陣列數值為1的索引位置(用i和j表示第i個隊員和第j個隊員將可能發生一場比賽)。

先定下第i以及第j個隊員(通過if(a[i][j]==1)來判定),然後暫時(注意這裡是暫時排出因為下一天的場次比賽還需要還需要用)排出掉第i行,第j行,第i列,第j列(目的是為了安排不同的隊員,不重複進行比賽),排除的方法就是將a[i][j]=3;改變二維陣列值。接著安排同一天的下一場比賽資訊(誰和誰比賽)。

注意:

(1)暫時排出這乙個操作時候,要注意不要把已經定下的球員i和j排除掉。

(2)安排完一天所有的場次資訊,第二天從第一場開始安排(一定不能忽略這個,如果看我的這篇部落格學習這道題的話)

(3)藍橋杯測試樣例上面沒有逗號,是空格,所以大家注意一下就好了,是出題的原因,不是是小問題,不影響題目的理解

說的不少了,看**吧,**不是很難理解。。。

ac**:

#include

#include

#include

#include

#include

#include

using

namespace std;

int a[65]

[65];

//為1時表示,可以被安排,為2時表示已經被安排過了 ,為3表示暫時被排除

int n;

int ans[

100]

;int k=1;

//ans陣列的索引位置的初始值

int cnt=0;

//第幾天

voidf(

int step)

//step==pow(2,n-1)+1時,輸出結果

for(i=

1;i<=h;i++

)for

(j=i+

1;j<=l;j++)if

(a[i]

[j]==3)

//將上一天中的標記為暫時被排除的隊員標號(索引位置)恢復

a[i]

[j]=1;

k=1;

//將陣列ans的索引位置置為1表示重新更新ans陣列的值,即下一天的場次資訊 f(

1);//從下一天的第一場開始安排(注意這裡容易出錯,不要忘記了這句**)

}else

ans[k++

]=i;

ans[k++

]=j;

//cout(step+1)

;//安排下一場次的比賽隊員資訊(標號) }}

}}}int

main()

藍橋杯VIP試題 演算法訓練 比賽安排

資源限制 時間限制 1.0s 記憶體限制 512.0mb 問題描述 設有有2 n n 6 個球隊進行單迴圈比賽,計畫在2 n 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n 1天內每個隊都與不同的對手比賽。輸入格式 輸入檔案matchplan.in共一行,輸入n的數值。輸出格式 ...

藍橋杯 演算法訓練 比賽安排

問題描述 設有有2 n n 6 個球隊進行單迴圈比賽,計畫在2 n 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n 1天內每個隊都與不同的對手比賽。輸入格式 輸入檔案matchplan.in共一行,輸入n的數值。輸出格式 輸出檔案matchplan.out共 2 n 1 行,第i...

藍橋杯 ALGO 65 演算法訓練 比賽安排

演算法訓練 比賽安排 時間限制 1.0s 記憶體限制 512.0mb 問題描述 設有有2 n n 6 個球隊進行單迴圈比賽,計畫在2 n 1天內完成,每個隊每天進行一場比賽。設計乙個比賽的安排,使在2 n 1天內每個隊都與不同的對手比賽。輸入格式 輸入檔案matchplan.in共一行,輸入n的數值...