2011-06-10 21:18:29Morris
d913. 1. 彈珠配置
內容 :
「彈珠排排站」是園遊會中很受歡迎的腦力激盪遊戲攤位。基本上有 6 個不同的彈珠 (彈珠代號為1, 2, 3, 4, 5, 6) 要進行排序。遊戲剛開始
時,老闆會先選定一種彈珠排列順序當做解答,爾後遊戲者每次排好彈珠後,老闆會告知有幾個彈珠放對位置,但是不會告知是哪幾個彈珠放對或放錯位置。如果完
全正確就可以兌換贈品一份,若猜錯了,則進行下一輪的排序,不過每一次遊戲總共只有七次的排序機會。在任意猜測六次之後,你希望能自動推斷最後一次機會該
如何排序來增加獲獎的機率。請寫一個程式,在輸入前六次猜測的紀錄後,計算第七次 (最後一次)
該採用的彈珠排序方式,也就是找出一組符合前六次猜測結果的彈珠排序順序。
輸入說明
:
輸入檔共有 6 行。每行有 7 個以空白隔開的數字,前六個數字代表此輪彈珠排序順序(每個彈珠代號只會出現一次),最後一個數字代表彈珠在正確位置的個數(0 ~ 5)。
輸出說明
:
請輸出第七輪應該採用的彈珠排序方式。輸入保證至少會有一組答案,若有多組可能答案,請依字典順序(彈珠代號較小的優先)輸出第一組即可。
範例輸入 :
輸入範例1 : 1 2 3 4 5 6 2 4 1 3 2 5 6 3 1 3 4 2 5 6 3 3 4 2 1 5 6 4 2 4 1 3 5 6 2 3 2 4 1 5 6 3 輸入範例2 : 6 5 4 3 2 1 0 5 4 3 2 1 6 2 4 2 3 6 5 1 3 1 2 3 4 6 5 4 1 3 2 4 6 5 2 1 2 3 6 4 5 3
範例輸出 :
輸出範例1 : 4 3 2 1 5 6 輸出範例2 : 1 2 3 4 5 6
提示
:
出處
:
/**********************************************************************************/
/* Problem: d913 "1. 彈珠配置" from 99資訊能力競賽全國決賽 */
/* Language: C */
/* Result: AC (4ms, 276KB) on ZeroJudge */
/* Author: morris1028 at 2011-06-09 23:13:35 */
/**********************************************************************************/
#include<stdio.h>
#include<stdlib.h>
int a, b, c, Map[6][7];
int Used[7]={0}, Find=0, Way[7];
void DFS(int Now) {
int a;
if(Find == 1) return;
if(Now == 6) {
int b, t;
for(a = 0; a < 6; a++) {
t = 0;
for(b = 0; b < 6; b++)
if(Way[b] == Map[a][b]) t++;
if(t!=Map[a][6]) break;
}
if(a == 6) {
for(a = 0; a < 6; a++)
printf("%d ", Way[a]);
puts(""), Find = 1;
}
return;
}
for(a = 1; a <= 6; a++)
if(Used[a] == 0) {
Used[a] = 1, Way[Now] = a, DFS(Now+1), Used[a] = 0;
}
}
main() {
while(scanf("%d", &Map[0][0]) == 1) {
for(a = 1; a < 7; a++)
scanf("%d", &Map[0][a]);
for(a = 1; a < 6; a++)
for(b = 0; b < 7; b++)
scanf("%d", &Map[a][b]);
Find = 0, DFS(0);
}
return 0;
}
下一篇:d914. 2. 圍棋資料庫比對