總時間限制:
1000ms
記憶體限制:
65536kb
描述有9個時鐘,排成乙個3*3的矩陣。
現在需要用最少的移動,將9個時鐘的指標都撥到12點的位置。共允許有9種不同的移動。如下表所示,每個移動會將若干個時鐘的指標沿順時針方向撥動90度。
移動 影響的時鐘輸入1 abde
2 abc
3 bcef
4 adg
5 bdefh
6 cfi
7 degh
8 ghi
9 efhi
(圖 2)
從標準輸入裝置讀入9個整數,表示各時鐘指標的起始位置。0=12點、1=3點、2=6點、3=9點。
輸出輸出乙個最短的移動序列,使得9個時鐘的指標都指向12點。按照移動的序號大小,輸出結果。
樣例輸入
3 3 0樣例輸出2 2 2
2 1 2
4 5 8 9
1 #include 2 #include 3using
namespace
std;
4int state[5][5] = ;
5int s[5][5] = ;
6int swit[5][5] = ;
7int cop[5][5] = ;
8int sum = 0;9
int mi = 100;10
11void changeswit(int a, int b, int
t)12
20else
if(a == 2 && b != 2)21
26else
if(a == 2 && b == 2)27
34else35;
37int dy[3] = ;
38for(int i = 0; i < 3; i++)
39for(int j = 0; j < 3; j++)
40 state[a+dx[i]][b+dy[j]] = (state[a+dx[i]][b+dy[j]] + t) % 4;41
}42return;43
44}4546
47int
main()
4864 sum = 0;65
66 swit[1][1] =i;
67 swit[1][2] =j;
68 swit[1][3] =k;
69 changeswit(1,1
,i);
70 changeswit(1,2
,j);
71 changeswit(1,3
,k);
7273
if(state[1][1] != 0)74
78if(state[1][3] != 0)79
83if(state[1][2] != 0)84
88if(state[2][1] != 0)89
93if(state[2][3] != 0)94
98if(state[2][2] != 0) continue;99
if(state[3][1] == state[3][2] && state[3][1] == state[3][3
])100
112}
113else
continue
;114
}115
}116
}117
bool f = 0
;118
for(int i = 1; i < 4; i++)
119for(int j = 1; j < 4; j++)
120127
}128 printf("\n"
);129
return0;
130 }
第一周 演算法之列舉
列舉 基於逐個嘗試答案的一種問題求解策略 例題一 完美立方 解題思路 看看n以內有多少四種組合,每個都試一遍 四重迴圈列舉a,b,c,d,a在最外層,d在最裡層,每一層都是從小到大列舉,a列舉範圍 2,n b範圍 2,a 1 c範圍 b,a 1 d範圍 c,a 1 答案 include includ...
第一周 遇到的問題
sql 4.1 查有成績的學生資訊 這個問題就有意思了,感覺是和前面的 查詢sc表中存在成績的學生資訊 重複了。但是查了資料是有區別的,依然不是很明白。7.查詢沒有學全所有課程的同學的資訊 這個問題講資料庫的時候有一道類似的題目 查詢選修了所有課程的學生資訊 書上用的是exists語句,但是我不太理...
2019第一周程式設計總結2
7 2 求最大值及其下標 20 分 本題要求編寫程式,找出給定的n個數中的最大值及其對應的最小下標 下標從0開始 輸入格式 輸入在第一行中給出乙個正整數n 1輸出格式 在一行中輸出最大值及最大值的最小下標,中間用乙個空格分開。輸入樣例 62 8 10 1 9 10 輸出樣例 10 2 1 實驗 in...