×
解除綁定,重新設定系統帳號的密碼
您的系統帳號 ID:
您的系統帳號:
您的帳號暱稱:
設定新密碼:
設定新密碼:
×
請輸入要加入的「課程代碼」
請向開設課程的使用者索取「課程代碼」
分類題庫
解題動態
排行榜
討論區
競賽區
登入
註冊
發表新討論
解題報告
#16457: C的解題思路
freedom501999@gmail.com
(帥氣魔方生)
學校 : 不指定學校
編號 : 88611
×
傳送站內訊息
傳給:
主題:
內容:
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
d537.
4. 染色遊戲
--
98學年度
北基區
資訊學科能力競賽
| From: [27.52.77.116] | 發表日期 : 2019-01-02 23:53
這題請準備三個全域陣列,分別給 紅、黃、藍,並且陣列元素初值全都是 0 代表白底
將顏色轉換成數字,令 R=1、Y=2、B=4,就可以湊出所有顏色且不重複
R Y O B P G D
1 2 3 4 5 6 7
讀到 n 確定白紙大小,讀到座標分別確定三色各自起始點
接下來就是顏色擴散的函式,在最下面
然後用一個變數把三張紙的值相加,得到一個顏色的代表值
( 想像 3 張透明墊板,分別塗上RYB,然後三張疊起來,顏色重疊處就是三張紙的值相加結果)
( 例如 R + Y =>O 、Y + B => G )
統計題目要求的顏色隨時間變化時曾出現的最大值,即是答案
/* map 就是某顏色的色紙,n 是題目邊長,start 是顏色擴散中心點,time 是時間,從 0 開始 */
void color_spread(char map[100][100], int n, int start, int time)
{
int i, j, a=start/n, b=start%n;
int c=map[a][b]; /* c 是顏色的代表值,1或2或4 */
for(i=a-time;i<=a+time;i++) /* 以中心點向上下左右跑 */
{
for(j=b-time;j<=b+time;j++)
{
if(i<0 || i>=n || j<0 || j>=n) /* 超過邊界的要跳過 */
continue;
else if(map[i][j]) /* 已經有顏色的格子跳過 */
continue;
else
map[i][j]=c;
}
}
}
/* RYB三色每擴散一次,就統計疊加後的顏色,不用再開一個陣列儲存 */
/* 只要記錄題目要求的某色在該時刻共佔多少面積,並與最大值比較即可 */
ZeroJudge Forum