「文字列をランダムで作ってPPAPになるコードでよくわからないエラーでるんだけど」と言われて、
エラー云々はよくわからなかったので、自分でそういうコードを書いてみました。
[cpp] #include <iostream> #include <time.h> #include <string> #include <random> #include <chrono> using namespace std; int dice(void); int main(int argc, char const *argv[]) { //A~Zのアルファベットの配列を作成 char moji[26]; int j=0; for(char i='A';i<='Z';i++){ moji[j]=i; j++; } auto start=chrono::system_clock::now(); //時間計測 string s; int count=0; //最悪∞回ループが回るので規定回数回ったら終了させたい用 while(count<1000000){ for(int i=0;i<4;i++){ int j=dice(); s.push_back(moji[j]); } if(s=="PPAP"){ printf("%d回目にPPAPになりました。\n",count+1); break; } count++; s.clear(); } if(count==1000000) cout<<"PPAPにはなりませんでした。"<<endl; //時間計測 auto end=chrono::system_clock::now(); auto dur=end-start; auto second=chrono::duration_cast<std::chrono::seconds>(dur).count(); cout<<second<<endl; return 0; } //乱数発生関数 int dice(void){ random_device rnd; mt19937 mt(rnd()); uniform_int_distribution<int> rand26(0,25); return rand26(mt); } [/cpp]
実行にかかる時間を測るためにchrono使っています。C++11で増えた機能全然知らなくてやばい。
[blogcard url=”https://cpprefjp.github.io/reference/chrono.html”]
アルファベットの配列を先に作ってます。もう少し綺麗に書けないかなあと。ただ、
[cpp] char moji[26]={'A','B',・・・,'Z'}; [/cpp]
って書くよりかはマシな気がします。まあ、先に作っておいて、コピペでいいけども。素数とかはそっちの方が早いですし。
実行時間は大体30秒程度でした。まあやってる話がボゴソートですし。