のシーケンスを生成するための別の解決策を探して、のは言わせて:データ
1つのルールによって、次の以前の 1から新しい文字列を生成します。
1、11、21、 1211、111221、312211、13112221、...
- "1":つの番号1を意味するので、次の文字列が "11"
- 「11あろう21 『
- 『21: "1ので、次の文字列があろう2つの数値を意味する』 1211 『 』一の番号2などつの番号1は、次の文字列があることを意味し、』....
そして、私の解決策はここにあります:
#include <string>
#include <iostream>
using namespace std;
class look_n_say {
public:
look_n_say(int n) : n(n) {
}
friend ostream& operator <<(ostream& out, const look_n_say& rhs) {
string result;
string init_str("1");
out << init_str << endl;
for(int i = 1; i < rhs.n; ++i) {
result = rhs.get_new_str(init_str);
out << result << '\n';
init_str = result;
result.clear();
}
return out;
}
private:
string get_new_str(const string& str) const {
int cnt(1);
string result;
for(string::size_type i = 0, len = str.length(); i < len; ++i) {
if(i < len - 1 && str[i] == str[i + 1]) {
++cnt;
}
else {
result.append(1, cnt + 48);
result.append(1, str[i]);
cnt = 1;
}
}
return result;
}
private:
int n;
};
int main() {
look_n_say lns(10);
cout << lns << endl;
return 0;
}
私が私のソリューションに満足していない理由は、ここではSTLアルゴリズムを使用した洗練されたソリューションが欠けていたからです。私はstd::transform
を考えましたが、それを適用する方法は見つけられませんでした。この問題を解決する良い方法はありますか?誰も私と共有できますか?私のコーディングスタイルに関するフィードバックやコメントは非常に高く評価されます。私のコーディングスタイルがどれほど悪いか教えてください。それから私は学びます。私の知る限り
おかげで、
チャン
は宿題のような音... – EmeryBerger
@EmergyBerger:これは宿題の問題ではありません。私はすでにそれを解決しましたが、私が見る限りでは、カレッジのクラスはSTLの知識を必要としません。読んでいただきありがとうございます。 – Chan
さて、 'std :: transform'を意味のある意味で使うことはできません。なぜなら、' N'個のアイテムを 'input 'とし、' N'個のアイテムを 'output'として生成するからです。それはここであなたの問題に対応していないようです。 –