摺紙問題
一張紙沿一個方向對摺,凹為0,凸為1
以0/1顯示相對應對摺數之規律
#include <iostream> #include <string> #include <math.h> using namespace std; int main() { string result = ""; //length=2ˆn-1 short layer; //n string buf; string second = "001"; getline(cin, buf); layer = stoi(buf, nullptr); if (layer == 1) cout << 0; else if (layer == 2) cout << second; else result = second; string prefix,suffix; for (auto i=3; i<=layer; i++){ auto temp_len = pow(2,i)-1; auto mid = pow(2,i-1)/2; string temp; //prefix part for (auto j=0; j<mid-1; j++){ temp += result[j]; } prefix = temp; temp = ""; //suffix part for (auto j=mid; j<(pow(2,i-1)-1); j++){ temp += result[j]; } suffix = temp; temp = ""; //repeat part result = prefix + '0' + suffix + '0' + prefix + '1' + suffix; } cout << result; }
規律解釋:
摺一次是0
摺兩次是001(不明白的自己摺一次)
然後因為之後的都是取之前的 前半部+0+後半部+0+前半部+1+後半部 這種規律,所以很快就做出來了
只是這個做法不太美觀,用STL的string也不夠快……
文章標籤
全站熱搜