C語言 撥鐘問題的兩種解法。

2021-09-05 10:31:35 字數 1865 閱讀 7830

撥鐘問題

描述有9個時鐘排成乙個3*3的矩陣,從上到下從左到右依次標為abcdefghi。

每個時鐘只有1個時針,時針初始指向3、6、9或12點。

對每乙個時鐘的時針共允許有9種不同的移動,每個移動會將若干個時鐘的指標沿順時針方向撥動90度。

移動 影響的時鐘

1 abde

2 abc

3 bcef

4 adg

5 bdefh

6 cfi

7 degh

8 ghi

9 efhi

輸入多組測試資料,每組測試資料3行3列,共9個整數,表示各時鐘指標的起始位置,相鄰兩個整數之間用單個空格隔開。其中,0=12點、1=3點、2=6點、3=9點。

輸出每組測試資料在一行中輸出乙個最短的移動序列,使得9個時鐘的指標都指向12點。按照移動的序號從小到大輸出結果。相鄰兩個整數之間用單個空格隔開。

樣例輸入

3 3 0

2 2 2

2 1 2

樣例輸出

4 5 8 9

我們可以分析每個時鐘被影響的移動方式有哪些

例如a會被移動1,2,4影響

題目就不過多地分析了,大佬們的部落格都講得很清楚了,我自己語言能力有限,擔心自己表達得不好。

a:1,2,4

b:1,2,3,5

c:2,3,6

d:1,4,5,7

e:1,3,5,7,9

f:3,5,6,9

g:4,7,8

h:5,7,8,9

i:6,8,9

方法一(暴力法):

#include

#define cir(i) for(int i=0;i<4;i++)

intmain()

}}for(

int i=

0;i<

9;i++

)printf

("\n");

}return0;

}

方法二

#include

#define cir(i) for(int i=0;i<4;i++)

intmain()

}}}for

(int i=

0;i<

9;i++

)printf

("\n");

}return0;

}

大一新生一枚

題目**於學校的oj平台

第一次做這道題有點蒙

老師對第二種方法一帶而過,本人懶不想寫,

在csdn沒有找到c語言的第二種方法,那乾脆就自己寫吧。

兩種方法都過了學校的oj平台

可以清晰地看到方法一耗時明顯多於方法二

[第乙個是方法二,第二個是方法一]

第一次發文,有點小激動。

希望未來我會一直努力,有朝一日能成為it界的大佬!

關於**,若有不足之處,非常希望您指正出來!

撥鐘問題的若干解法

問題描述 參考 有9個時鐘,排成乙個3 3的矩陣。現在需要用最少的移動,將9個時鐘的指標都撥到12點的位置。共允許有9種不同的移動。如右表所示,每個移動會將若干個時鐘的指標沿順時針方向撥動90度。移動 影響的時鐘 1 abde 2 abc 3 bcef 4 adg 5 bdefh 6 cfi 7 d...

八皇后問題的兩種解法

八皇后問題,是回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋 上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。高斯認為有76種方案。1854年在柏林 的象棋雜誌上不同的作者發表了40種不同的解,後...

6 2分魚問題兩種解法

分魚問題,從e開始遞推,使用for迴圈簡化中間計算,優化列舉 include using namespace std int main if i 0 已找到答案 break num 0 num 1 4 5 1 for int i 0 i 5 i cout num i return 0 分魚問題,從e...