日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯 标题:纵横火柴旗子

發(fā)布時(shí)間:2025/3/11 编程问答 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯 标题:纵横火柴旗子 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【編程題】
? ? 這是一個(gè)縱橫火柴棒游戲。如圖[1.jpg],在一個(gè)3x4的方格中,游戲的雙方輪流放置火柴棒。其規(guī)則是:
? ? 1. 不能放置在已經(jīng)放置火柴棒的地方(即只能在空格中放置)。
? ? 2. 火柴棒的方向只能是垂直或水平放置。
? ? 3. 火柴棒不能與其它格子中的火柴“連通”。所謂連通是指兩根火柴棒可以連成一條直線,且中間沒有其它不同方向的火柴“阻攔”。
? ? 例如:圖[1.jpg]所示的局面下,可以在C2位置豎直放置,但不能水平放置,因?yàn)闀?huì)與A2連通。同樣道理,B2,B3,D2此時(shí)兩種方向都不可以放置。但如果C2豎直放置后,D2就可以水平放置了,因?yàn)椴辉贂?huì)與A2連通(受到了C2的阻擋)。
? ? 4. 游戲雙方輪流放置火柴,不可以棄權(quán),也不可以放多根。直到某一方無法繼續(xù)放置,則該方為負(fù)(輸?shù)囊环?#xff09;。

? ? 游戲開始時(shí)可能已經(jīng)放置了多根火柴。

? ? 你的任務(wù)是:編寫程序,讀入初始狀態(tài),計(jì)算出對自己最有利的放置方法并輸出。


? ? 如圖的局面表示為:
????00-1
????-000
????0100
? ? 即用“0”表示空格位置,用“1”表示豎直放置,用“-”表示水平放置。
【輸入、輸出格式要求】
? ? 用戶先輸入整數(shù) n(n<100), 表示接下來輸入 n 種初始局面,每種局面占3行(多個(gè)局面間沒有空行)。
? ? 程序則輸出對應(yīng)的每種初始局面,計(jì)算出的最佳走法(行號(hào)+列號(hào)+放置方式)。
? ? 例如:用戶輸入:
????2
????0111
????-000
????-000
????1111
? ? ?----
????0010
? ?則程序可以輸出:
????00-
????211
? ?輸出結(jié)果的含義為:
? ?對第一個(gè)局面,在第0行第0列水平放置
? ?對第二個(gè)局面,在第2行第1列垂直放置
? ?注意:
? ?行號(hào)、列號(hào)都是從0開始計(jì)數(shù)的。
? ?對每種局面可能有多個(gè)最佳放置方法(解不唯一),只輸出一種即可。

? ?例如,對第一個(gè)局面,001 也是正解;最第二個(gè)局面,201也是正解。

  • #include<iostream>
  • using namespace std;
  • char grid[3][4];
  • char type[]={'1','-'};
  • bool isPositon(int x,int y,char c)//判斷該位置是否可以放
  • {
  • if(c=='1')//1有兩種情況不能放,上下都不能為1,但可以用-隔開
  • {
  • for(int i=x-1;i>=0;i--)
  • {
  • if(grid[i][y]==c)
  • return false;
  • else
  • break;
  • }
  • for(int i=x+1;i<3;i++)
  • {
  • if(grid[i][y]==c)
  • return false;
  • else
  • break;
  • }
  • }
  • else //-也有兩種情況,左右不能為-,但可以用1隔開
  • {
  • for(int j=y-1;j>=0;j--)
  • {
  • if(grid[x][j]=='-')
  • return false;
  • else break;
  • }
  • for(int j=y+1;j<4;j++)
  • {
  • if(grid[x][j]=='-')
  • return false;
  • else break;
  • }
  • }
  • return true;
  • }
  • bool isWin(int x,int y,char c)//判斷在(x,y)放c能不能贏
  • {
  • if(!isPositon(x,y,c))//不能放
  • return false;
  • else
  • {
  • //枚舉當(dāng)前情況下,對方有沒有贏的可能
  • for(int i=0;i<3;i++)
  • {
  • for(int j=0;j<4;j++)
  • {
  • if(grid[i][j]=='0')
  • {
  • for(int k=0;k<2;k++)
  • {
  • grid[i][j]=type[k];
  • if(isWin(i,j,type[k]))//對方能贏
  • {
  • grid[i][j]='0';
  • return false;//我們就不能贏
  • }
  • grid[i][j]='0';
  • }
  • }
  • }
  • }
  • return true;//能贏
  • }
  • }
  • void Judge()
  • {
  • //枚舉可以放的情況
  • for(int i=0;i<3;i++)
  • {
  • for(int j=0;j<4;j++)
  • {
  • if(grid[i][j]=='0')
  • {
  • for(int k=0;k<2;k++)
  • {
  • grid[i][j]=type[k];
  • if(isWin(i,j,type[k]))//放該位置能贏
  • {
  • cout<<i<<' '<<j<<' '<<type[k]<<endl;
  • return ;
  • }
  • grid[i][j]='0';
  • }
  • }
  • }
  • }
  • }
  • int main()
  • {
  • int n;
  • cin>>n;
  • while(n--)
  • {
  • //輸入數(shù)據(jù)
  • for(int i=0;i<3;i++)
  • {
  • for(int j=0;j<4;j++)
  • {
  • cin>>grid[i][j];
  • }
  • }
  • //枚舉
  • Judge();
  • }
  • }

  • 總結(jié)

    以上是生活随笔為你收集整理的蓝桥杯 标题:纵横火柴旗子的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。