「文字列をランダムで作って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秒程度でした。まあやってる話がボゴソートですし。