今有 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」 檔案中
注意:只寫劃線處應該填的內容,劃線前後的內容不要抄寫。
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;
}
第三屆藍橋杯初賽6大數乘法填空題
對於32位字長的機器,大約超過20億,用int型別就無法表示了,我們可以選擇int64型別,但無論怎樣擴充套件,固定的整數型別總是有表達的極限!如果對超級大整數進行精確運算呢?乙個簡單的辦法是 僅僅使用現有型別,但是把大整數的運算化解為若干小整數的運算,即所謂 分塊法 如圖 1.jpg 表示了分塊乘...
第三屆藍橋杯複試
第四題 奇怪的比賽 某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答10個問題 其編號為1到10 越後面越有難度。答對的,當前分數翻倍 答錯了則扣掉與題號相同的分數 選手必須回答問題,不回答按錯誤處理 每位選手都有乙個起步的分數為10分。某獲勝選手最終得分剛好是100分,如果不...
藍橋杯第三屆題目
某電視台舉辦了低碳生活大獎賽。題目的計分規則相當奇怪 每位選手需要回答10個問題 其編號為1到10 越後面越有難度。答對的,當前分數翻倍 答錯了則扣掉與題號相同的分數 選手必須回答問題,不回答按錯誤處理 每位選手都有乙個起步的分數為10分。某獲勝選手最終得分剛好是100分,如果不讓你看比賽過程,你能...