題目:
小明家的一面裝飾牆原來是 3*10 的小方格。
現在手頭有一批剛好能蓋住2個小方格的長方形瓷磚。
瓷磚只有兩種顏色:黃色和橙色。
小明想知道,對於這麼簡陋的原料,可以貼出多少種不同的花樣來。
小明有個小小的強迫症:忍受不了任何2*2的小格仔是同一種顏色。
(瓷磚不能切割,不能重疊,也不能只鋪一部分。另外,只考慮組合圖案,請忽略瓷磚的拼縫)
顯然,對於 2*3 個小格仔來說,口算都可以知道:一共10種貼法,如【p1.png所示】
但對於 3*10 的格仔呢?肯定是個不小的數目,請你利用計算機的威力算出該數字。
注意:你需要提交的是乙個整數,不要填寫任何多餘的內容(比如:說明性文字)
解題思路:
用dfs來做,黃色瓷磚用1表示,橙色用2來表示,用a陣列來表示起始的狀態,由於2*2的小格仔不是同一種顏色,用乙個judge函式來判斷是否滿足條件。
#includeint a[5][15];ac**:int count=0;
bool judge(int x,int y)
void dfs(int x,int y)
if(y>10)
if(a[x][y]==-1)
a[x][y]=-1;
a[x][y+1]=-1;
a[x][y]=2;
a[x][y+1]=2;
if(judge(x,y))
a[x][y]=-1;
a[x][y+1]=-1;
}if(a[x+1][y]==-1)
a[x][y]=-1;
a[x+1][y]=-1;
a[x][y]=2;
a[x+1][y]=2;
if(judge(x,y))
a[x][y]=-1;
a[x+1][y]=-1;}}
else }
int main()
}//由於座標是從1開始並且陣列比原本的大因此不必考慮是否越界的問題
dfs(1,1);
printf("%d",count);
return 0;
}
第八屆藍橋杯(國賽) 對局匹配
問題描述 小明發現 的自動對局系統在匹配對手時,只會將積分差恰好是 k 的兩名使用者匹配在一起。如果兩人分差小於或大於 k,系統都不會將他們匹配。現在小明知道這個 總共有 n 名使用者,以及他們的積分分別是 a1,a2,an。輸入格式 第一行包含兩個個整數 n 和 k。第二行包含n個整數 a1,a2...
藍橋杯第八屆省賽
第4題 6x6的方格,沿著格仔的邊線剪開成兩部分。要求這兩部分的形狀完全相同。如圖 p1.png,p2.png,p3.png 就是可行的分割法。試計算 包括這3種分法在內,一共有多少種不同的分割方法。注意 旋轉對稱的屬於同一種分割法。請提交該整數,不要填寫任何多餘的內容或說明文字。圖的dfs 按照兩...
第八屆藍橋盃國賽 數字和 Java
數學家高斯很小的時候就天分過人。一次老師指定的算數題目是 1 2 100。高斯立即做出答案 5050 這次你的任務是類似的。但並非是把乙個個的數字加起來,而是對該數字的每乙個數字作累加。這樣從1加到100的 和 是 901 從10加到15是 21,也就是 1 0 1 1 1 2 1 3 1 4 1 ...