0

ランダムな値を生成し、配列に解析しています。どの部分が問題を引き起こしているのか考えていますか?

よろしくお願いします!:)

for(x=0; x<numberOfSboxes; x++)
{
    vecCheck.clear();
    for (y=0;y<sbox_Size; y++)
    {       
        int secondTemp = y;
        int firstTemp;
        firstTemp = rand() % numberRange;

        int mycount = (int) std::count (vecCheck.begin(), vecCheck.end(), y); // count if number is in vector
        if( (mycount==1) || (firstTemp==y)  )
        {
            continue;
        }
        else
        {
            if(vecCheck.size()==0)
            {
                vecCheck.push_back(firstTemp); // first number
                sBox[x][y] = firstTemp;
                sBox[x][firstTemp] = secondTemp;
                vecCheck.push_back(secondTemp); //second number 
            }
            else
            {                   
                int mycount = (int) std::count (vecCheck.begin(), vecCheck.end(), firstTemp); // count if number is in vector
                if(mycount==1)
                {
                    //if number generated is found, then break loop and restart
                    --y;
                    continue;
                }
                else
                {
                    //if number generated is not found
                    sBox[x][y] = firstTemp; // first number generated
                    sBox[x][firstTemp] = secondTemp;
                    vecCheck.push_back(firstTemp); //push back to record
                    vecCheck.push_back(secondTemp); //push back to record
                }
            }
        }
    }
}

常にガベージ値を生成するわけではありませんが、生成する場合もあります。例を以下に示します。

  sBox[0][16] = {9,12,15,5,7,3,12765952,4,13,0,11,10,1,8,12688216,2};
  sBox[1][16] = {6,11,3,2,8,10,0,15,4,134514593,5,1,14,-1075,0,78827,12,7};
  sBox[2][16] = {3,4,7,0,1,13,11,2,10,14,8,6,15,5,9,12};

rand()に問題はないと思います。

編集:

firstTempの生成には問題はありません。数値は常に0〜15の範囲です。値の出力が上記のようになる傾向がある理由を誰かが知っていますか?

4

0 に答える 0