(列舉)8469 特殊密碼鎖

2022-03-10 11:53:13 字數 1407 閱讀 8830

問題描述

有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成(n<30),按鈕有凹/凸兩種狀態,用手按按鈕會改變其狀態。然而讓頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個按鈕。當前密碼鎖狀態已知,需要解決的問題是,你至少需要按多少次按鈕,才能將密碼鎖轉變為所期望的目標狀態。 

輸入

兩行,給出兩個由0、1組成的等長字串,表示當前/目標密碼鎖狀態,其中0代表凹,1代表凸。 

輸出

至少需要進行的按按鈕操作次數,如果無法實現轉變,則輸出 impossible。 

樣例輸入

011 

000 

樣例輸出

1我の思考

此題想要用列舉法來解決,那我們就應該找出可能的幾種情況。我們研究過這個機制後會發現,影響按鈕改變的其實就是周圍的按鈕。但是在這裡,我們會發現,第乙個按鈕的按與否,會影響到後面所有的按鈕,也就是說,這裡的列舉是列舉出當按下第乙個按鈕和不按第乙個按鈕的情況。而其他的,就只要找到乙個不和目標對應為相等的按鈕,我們按下它的下乙個即可。

我の**

#include #include #include using namespacestd;

int result=1<<30;

int result2=0;

int len=0;

void flipnum(char* a,inti)

else

}//比較是否相同

int cmpnum(char* a,char*b)

}return true;

}//設定反轉

void setarray(char* a,inti) else

result2++;

}//獲取次數最小的

int minnum(int i,intj)

intmain()

char c[35];

for(int p=0;p<2;p++)

}for(int i=0;i)}}

}if(result == 1<<30)

cout<<"impossible";

elsecout

}

我の小結

此外,因為我也算是乙個演算法學習上的新人,在很多細節處理的地方都不好。通過這個例子,我應該注意到,如果是最小的次數,一定要記得把所有的情況都經歷過一次,再取最小的。還有陣列設定長度的時候,最好設大一點點,可以提高容納錯誤的能力,另外就是一些常用函式的對應標頭檔案啊之類的要記憶一下qaq。

8469 特殊密碼鎖

總時間限制 1000ms 記憶體限制 1024kb 描述有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個...

8469 特殊密碼鎖

總時間限制 1000ms記憶體限制 1024kb 描述 有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左或者最右邊的按鈕,該按鈕只會影響到跟它相鄰的乙個...

OpenJudge 8469 特殊密碼鎖

中國mooc網,程式設計與演算法 二 第一周作業1 總時間限制 1000ms 記憶體限制 1024kb 有一種特殊的二進位制密碼鎖,由n個相連的按鈕組成 n 30 按鈕有凹 凸兩種狀態,用手按按鈕會改變其狀態。然而讓人頭疼的是,當你按乙個按鈕時,跟它相鄰的兩個按鈕狀態也會反轉。當然,如果你按的是最左...