放棋子 藍橋杯

2021-08-27 10:49:14 字數 2082 閱讀 5593

這是2023年第三屆藍橋杯全國軟體大賽預賽(c++本科組)第7題,要求將**補全,實現「每行每列都正好有3顆棋子」的功能。

今有 6 x 6 的棋盤格。其中某些格仔已經預先放好了棋子。現在要再放上去一些,使得:每行每列都正好有3顆棋子。我們希望推算出所有可能的放法。下面的**就實現了這個功能。

初始陣列中,「1」表示放有棋子,「0」表示空白。

int n = 0;

bool checkstonenum(int x[6])

if(_____________________) return false; // 填空

} return true;

}int getrowstonenum(int x[6], int r)

int getcolstonenum(int x[6], int c)

void show(int x[6])

printf("\n");

}void f(int x[6], int r, int c);

void gonext(int x[6], int r, int c)

void f(int x[6], int r, int c)

return;

} if(______________) // 已經放有了棋子

int rr = getrowstonenum(x,r);

int cc = getcolstonenum(x,c);

if(cc>=3) // 本列已滿

gonext(x,r,c);

else if(rr>=3) // 本行已滿

f(x, r+1, 0);

else }

int main(int argc, char* argv)

, ,

, ,

, }; f(x, 0, 0);

printf("%d\n", n);

return 0;

}

請分析**邏輯,並推測劃線處的**。

答案寫在 「解答.txt」 檔案中

注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。

該題的難點在讀懂每個函式的作用:

# include int n = 0;

bool checkstonenum(int x[6])

if(numrow != 3 || numcol != 3) return false; // 填空

} return true;

}int getrowstonenum(int x[6], int r)

int getcolstonenum(int x[6], int c)

void show(int x[6])

printf("\n");

}void f(int x[6], int r, int c);

void gonext(int x[6], int r, int c)

void f(int x[6], int r, int c)

return;

} if(x[r][c] == 1) // 已經放有了棋子

int rr = getrowstonenum(x,r);

int cc = getcolstonenum(x,c);

if(cc>=3) // 本列已滿

gonext(x,r,c);

else if(rr>=3) // 本行已滿

f(x, r+1, 0);

else }

int main(int argc, char* argv)

, ,

, ,

, }; f(x, 0, 0);

printf("%d\n", n);

return 0;

}

numrow != 3 || numcol != 3

f(x, r, c + 1)

x[r][c] == 1

2023年藍橋杯預賽第七題放棋子

if return false 填空 return true int getrowstonenum int x 6 int r int getcolstonenum int x 6 int c void show int x 6 printf n void f int x 6 int r,int c...

藍橋杯 瓷磚鋪放 搜尋

有一長度為n 1 10 的地板,給定兩種不同瓷磚 一種長度為1,另一種長度為2,數目不限。要將這個長度為n的地板鋪滿,一共有多少種不同的鋪法?例如,長度為4的地面一共有如下5種鋪法 4 1 1 1 1 4 2 1 1 4 1 2 1 4 1 1 2 4 2 2 程式設計用遞迴的方法求解上述問題。輸入...

藍橋杯 瓷磚鋪放 遞迴

問題描述 有一長度為n 1 10 的地板,給定兩種不同瓷磚 一種長度為1,另一種長度為2,數目不限。要將這個長度為n的地板鋪滿,一共有多少種不同的鋪法?例如,長度為4的地面一共有如下5種鋪法 4 1 1 1 1 4 2 1 1 4 1 2 1 4 1 1 2 4 2 2 程式設計用遞迴的方法求解上述...