【程式設計題】
這是乙個縱橫火柴棒遊戲。如圖[1.jpg],在乙個3x4的方格中,遊戲的雙方輪流放置火柴棒。其規則是:
1. 不能放置在已經放置火柴棒的地方(即只能在空格中放置)。
2. 火柴棒的方向只能是垂直或水平放置。
3. 火柴棒不能與其它格仔中的火柴「連通」。所謂連通是指兩根火柴棒可以連成一條直線,且中間沒有其它不同方向的火柴「阻攔」。
例如:圖[1.jpg]所示的局面下,可以在c2位置豎直放置,但不能水平放置,因為會與a2連通。同樣道理,b2,b3,d2此時兩種方向都不可以放置。但如果c2豎直放置後,d2就可以水平放置了,因為不再會與a2連通(受到了c2的阻擋)。
4. 遊戲雙方輪流放置火柴,不可以棄權,也不可以放多根。直到某一方無法繼續放置,則該方為負(輸的一方)。
遊戲開始時可能已經放置了多根火柴。
你的任務是:編寫程式,讀入初始狀態,計算出對自己最有利的放置方法並輸出。
如圖的局面表示為:
00-1
-000
0100
即用「0」表示空格位置,用「1」表示豎直放置,用「-」表示水平放置。
【輸入、輸出格式要求】
使用者先輸入整數 n(n<100), 表示接下來輸入 n 種初始局面,每種局面佔3行(多個局面間沒有空行)。
程式則輸出對應的每種初始局面,計算出的最佳走法(行號+列號+放置方式)。
例如:使用者輸入:
20111
-000
-000
1111
----
0010
則程式可以輸出:
00-211
輸出結果的含義為:
對第乙個局面,在第0行第0列水平放置
對第二個局面,在第2行第1列垂直放置
注意:行號、列號都是從0開始計數的。
對每種局面可能有多個最佳放置方法(解不唯一),只輸出一種即可。
例如,對第乙個局面,001 也是正解;最第二個局面,201也是正解。
#includeusing namespace std;
char grid[3][4];
char type=;
bool ispositon(int x,int y,char c)//判斷該位置是否可以放
for(int i=x+1;i<3;i++)
}else //-也有兩種情況,左右不能為-,但可以用1隔開
for(int j=y+1;j<4;j++)
}return true;
}bool iswin(int x,int y,char c)//判斷在(x,y)放c能不能贏
grid[i][j]='0'; }}
} } return true;//能贏 }}
void judge()
}//列舉
judge();
} }
藍橋杯 標題 方格填數
在2行5列的格仔中填入1到10的數字。要求 相鄰的格仔中的數,右邊的大於左邊的,下邊的大於上邊的。如 圖1.png 所示的2種,就是合格的填法。請你計算一共有多少種可能的方案。請提交該整數,不要填寫任何多餘的內容 例如 說明性文字 includeusing namespace std int sum...
藍橋杯 標題 奇怪的分式
上小學的時候,小明經常自己發明新演算法。一次,老師出的題目是 1 4 乘以 8 5 小明居然把分子拼接在一起,分母拼接在一起,答案是 18 45 參見圖1.png 老師剛想批評他,轉念一想,這個答案湊巧也對啊,真是見鬼!對於分子 分母都是 1 9 中的一位數的情況,還有哪些算式可以這樣計算呢?請寫出...
藍橋杯 標題 史豐收速算
史豐收速演算法的革命性貢獻是 從高位算起,進製。不需要九九表,徹底顛覆了傳統手算 速算的核心基礎是 1位數乘以多位數的乘法。其中,乘以7是最複雜的,就以它為例。因為,1 7 是個迴圈小數 0.142857.如果多位數超過 142857.就要進1 同理,2 7,3 7,6 7 也都是類似的迴圈小數,多...