蓝桥杯java第五届决赛第三题--格子放鸡蛋
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯java第五届决赛第三题--格子放鸡蛋
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
標(biāo)題:格子放雞蛋X星球的母雞很聰明。它們把蛋直接下在一個(gè) N * N 的格子中,每個(gè)格子只能容納一枚雞蛋。它們有個(gè)習(xí)慣,要求:每行,每列,以及每個(gè)斜線上都不能有超過2個(gè)雞蛋。如果要滿足這些要求,母雞最多能下多少蛋呢,有多少種擺放方法呢?下面的程序解決了這個(gè)問題,請仔細(xì)分析程序邏輯,推斷劃線處缺少的代碼。public class A{static int max = 0;static int T = 0;static final int N = 6;// 只能在(r,c) 以及其右,其下放置 static void f(int[][] da, int r, int c){ if(r>=N){int n = count(da);if(n>max) {max = n;T = 0;}if(n==max) T++;return;}//計(jì)算一下步放哪int r_next = r;int c_next = c + 1;if(c_next>=N){c_next = 0;r_next++;}if(____________________){ // 填空位置da[r][c] = 1;f(da, r_next, c_next); }da[r][c] = 0;f(da, r_next, c_next);}static int count(int[][] da){int n = 0;for(int i=0; i<da.length; i++)for(int j=0; j<da[i].length; j++) if(da[i][j]==1) n++;return n;}static int spy(int[][] da, int r, int c){int m=0;// 該行int n=0;for(int i=0; i<N; i++) if(da[r][i]==1) n++;if(n>m) m = n;//該列n=0;for(int i=0; i<N; i++) if(da[i][c]==1) n++;if(n>m) m = n;//右斜線n=0;for(int i=0; i<N; i++){ if(r-i<0 || c-i<0) break; if(da[r-i][c-i]==1) n++;}for(int i=1; i<N; i++){ if(r+i>=N || c+i>=N) break; if(da[r+i][c+i]==1) n++;}if(n>m) m = n;//左斜線n=0;for(int i=0; i<N; i++){ if(r-i<0 || c+i>=N) break; if(da[r-i][c+i]==1) n++;}for(int i=1; i<N; i++){ if(r+i>=N || c-i<0) break; if(da[r+i][c-i]==1) n++;}if(n > m) m = n;return m;}public static void main(String[] args){int[][] da = new int[N][N];f(da, 0, 0);System.out.println(max);System.out.println(T);}}注意:通過瀏覽器提交答案。只填寫缺少的內(nèi)容,不要填寫任何多余的內(nèi)容(例如:說明性文字或已有符號(hào))。
思路:其實(shí)這題比較簡單,因?yàn)樵陬}目中已經(jīng)明確的告訴了你每行,每列,以及每個(gè)斜線上都不能有超過2個(gè)雞蛋,所以只要仔細(xì)點(diǎn)就知道只需要調(diào)用spy函數(shù)就解決了。
答案:spy(da,r,c) < 2
總結(jié)
以上是生活随笔為你收集整理的蓝桥杯java第五届决赛第三题--格子放鸡蛋的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯java第五届决赛第二题--六角幻
- 下一篇: 蓝桥杯java第五届决赛第四题--排列序