第一周 列舉 2 撥鐘問題

2022-08-12 18:48:19 字數 2226 閱讀 3548

總時間限制:

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 3

using

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...