3

私は、20 個の 1 と 0 の文字列を取る 1-D セルオートナマ プログラムに取り組んでいます。現在、毎回同じ方法でプログラムを開始する定数文字列があります。私の質問: プログラムを実行するたびに異なる結果が得られるように、文字列をランダム化するにはどうすればよいですか? どんな助けでも大歓迎です。

これまでの私のコードは次のとおりです。

#include <iostream>
#include <bitset>
#include <string>
#include <ctime>

using namespace std;

const int arrSize = 20;
int numGen = 10;
string Initial = "1001101010110100010";

int main()
{
bitset<arrSize + 2> array(Initial);

for(int i = 0; i < numGen; i++)
{
bitset<arrSize + 2> tempArr(array);

for(int k = arrSize; k >= 1 ; k--)
{
if(array[k])
cout << "1";
else
cout << "0";

int number = (int)array[k-1] << 2 | (int)array[k] << 1 | (int)array[k+1];

tempArr[k] = (number == 3 || number == 5 || number == 6);

}

array = tempArr;
cout << endl;
}
}
4

3 に答える 3

2

プログラムの肉を開始する前に、ランダムな文字列を作成できます。

string generateRandomString(){
    string s = "";
    for(int i=0;i<20;i++){
        if(rand()%2==0) s+="0";
        else s+="1";
    }
    return s;
}

次に、これをメインの最初の行として配置します-

int main(){
    srand(time(NULL));//Dont forget to seed your randoms!
    Initial = generateRandomString();// btw making the variable Initial capitalzied does not follow convention. 
    ....

また、必ず次のインクルードを追加してください -

#include<stdlib.h>
#include<time.h>
于 2013-09-25T19:34:56.190 に答える
1

これはどう :

struct new_str {
    new_str(std::string str )
        : str(str), len(str.size()) { }

    char operator ()() const {
     return str[static_cast<std::size_t>(std::rand() * 
                   (1.0 / (RAND_MAX + 1.0 )) * len)];
    }

    std::string str;
    std::size_t len;
};

そして、これをstd::generate

std::srand(std::time(0));
std::string Initial="1001101010110100010";
std::generate_n(Initial.begin(), Initial.size(), new_str(Initial));
于 2013-09-25T19:47:53.363 に答える