回炉-拨钟问题
題目:撥鐘問(wèn)題
1166:撥鐘問(wèn)題
描述
有9個(gè)時(shí)鐘,排成一個(gè)3*3的矩陣。
|-------| |-------| |-------| | | | | | | | |---O | |---O | | O | | | | | | | |-------| |-------| |-------|A B C |-------| |-------| |-------| | | | | | | | O | | O | | O | | | | | | | | | | |-------| |-------| |-------|D E F |-------| |-------| |-------| | | | | | | | O | | O---| | O | | | | | | | | | |-------| |-------| |-------|G H I(圖 1)
現(xiàn)在需要用最少的移動(dòng),將9個(gè)時(shí)鐘的指針都撥到12點(diǎn)的位置。共允許有9種不同的移動(dòng)。如下表所示,每個(gè)移動(dòng)會(huì)將若干個(gè)時(shí)鐘的指針沿順時(shí)針?lè)较驌軇?dòng)90度。
移動(dòng) 影響的時(shí)鐘
1 ABDE2 ABC3 BCEF4 ADG5 BDEFH6 CFI7 DEGH8 GHI9 EFHI輸入
9個(gè)整數(shù),表示各時(shí)鐘指針的起始位置,相鄰兩個(gè)整數(shù)之間用單個(gè)空格隔開(kāi)。其中,0=12點(diǎn)、1=3點(diǎn)、2=6點(diǎn)、3=9點(diǎn)。
輸出
輸出一個(gè)最短的移動(dòng)序列,使得9個(gè)時(shí)鐘的指針都指向12點(diǎn)。按照移動(dòng)的序號(hào)從小到大輸出結(jié)果。相鄰兩個(gè)整數(shù)之間用單個(gè)空格隔開(kāi)。
樣例輸入
樣例輸出
4 5 8 9思路:枚舉,也就是暴力,注意一個(gè)方法最多使用三次。
#include <string.h> #include <stdio.h> #define FOR(x) for(x=0;x<=3;x++) int main() {int i,a[10],b[10],c[10];for(i=1;i<=9;i++)scanf("%d",&a[i]);FOR(b[1])FOR(b[2])FOR(b[3])FOR(b[4])FOR(b[5])FOR(b[6])FOR(b[7])FOR(b[8])FOR(b[9]){c[1]=(a[1]+b[1]+b[2]+b[4])%4;c[2]=(a[2]+b[1]+b[2]+b[3]+b[5])%4;c[3]=(a[3]+b[2]+b[3]+b[6])%4;c[4]=(a[4]+b[1]+b[4]+b[5]+b[7])%4;c[5]=(a[5]+b[1]+b[3]+b[5]+b[7]+b[9])%4;c[6]=(a[6]+b[3]+b[5]+b[6]+b[9])%4;c[7]=(a[7]+b[4]+b[7]+b[8])%4;c[8]=(a[8]+b[5]+b[7]+b[8]+b[9])%4;c[9]=(a[9]+b[6]+b[8]+b[9])%4;if(c[1]+c[2]+c[3]+c[4]+c[5]+c[6]+c[7]+c[8]+c[9]==0){for(i=0;i<b[1];i++) printf("1 ");for(i=0;i<b[2];i++) printf("2 ");for(i=0;i<b[3];i++) printf("3 ");for(i=0;i<b[4];i++) printf("4 ");for(i=0;i<b[5];i++) printf("5 ");for(i=0;i<b[6];i++) printf("6 ");for(i=0;i<b[7];i++) printf("7 ");for(i=0;i<b[8];i++) printf("8 ");for(i=0;i<b[9];i++) printf("9 ");printf("\n");return(0);}} }總結(jié)
- 上一篇: UVA - 213 Message De
- 下一篇: 【模拟】Ingenious Lotter