題目描述:
資源限制
時間限制: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的數值...