2016-12-13 3 views
-4

宝くじプログラムの作成に問題があります。私は最近プログラミングに入ったので、それについてあまり理解していません。 その人は、できるだけ多くの行を選択できるようになっています。次に、1〜35の7つの乱数が昇順に表示され、その行では繰り返されません(次の行に再び表示されます)。 私は乱数を作るためにrand/srandを使っています。宝くじプログラム(昇順、ノンリピートなど)

助けがよかったです! ありがとうございます! :)

これはコードがatmのように見えます。

void randNr(int[]); 
int main() 
{ 
    int rad; 
    string svar, igen; 
    setlocale(LC_ALL, ""); 


    cout << "Hur många rader vill du ha? Välj ett tal mellan 1-12." << endl;   //How many rows do you want? 
    cin >> rad; 
    for (int a = 1; a < 7; a++) 
    { 
     if (rad < 0 || rad > 12) 
     { 
      if (cin.fail()) 
      { 
       system("CLS"); 
       cin.clear(); 
      } 
      cout << "Fel inmatning, Välj ett av alternativen. \n" << endl;   //Wrong answer, choose one of the alternatives 
      cout << "För att börja om tryck 'j'." << endl;       //'j' to start over 
      cout << "För att avsluta tryck 'n'." << endl;       //'n' to quit program 
      cin >> svar; 

      if (svar == "j" || svar == "J" || svar == "Ja" || svar == "ja") 
      { 
       system("CLS"); 
       return main(); 
      } 
      else if (svar == "n" || svar == "N" || svar == "Nej" || svar == "nej") 
      { 
       return 0; 
      } 
      else if (svar != "j" && svar != "J" && svar != "Ja" || svar != "n" && svar != "N" && svar != "nej" && svar != "Nej") 
      { 
       system("CLS"); 
      } 

     } 
    } 
    randNr(tal); 

while (true) { 

     cout << "\nFör att köra igen: tryck 'j'" << endl;   //To play again press 'j' 
     cout << "För att avsluta : tryck 'n'" << endl;    // To quit, press 'n' 
     cin >> igen; 
     if (igen == "j" || igen == "J" || igen =="Ja" || igen == "ja")       
     { 
      system("CLS"); 
      return main(); 
     } 
      else if(igen == "n" || igen == "N" || igen == "nej" || igen == "Nej") 
      { 
       system("CLS"); 
       return 0; 
      } 
       else 
       { 
        system("CLS"); 
        cout << "Fel inmatning, välj ett av alternativen" << endl; //Wrong answer, choose on of the alternatives 
       }   
    } 
    system("pause"); 
    return 0; 
} 
void randNr(int tal[]) 
{ 
    //DONT KNOW HOW TO DO THE ASCENDING/NON REPEATING PART 
    //---------------------HERE---------------------------  
} 
+1

いくつかのコードを投稿してください。 – pm100

+0

には、1〜35の間の1つの乱数を表示するプログラムを作成します。次に、最初の番号を記憶し、最初の番号を記憶し、最初の番号とは異なる別の番号を生成する2番目の番号を書き込みます。そこにフォームを構築する – pm100

+0

"私は"乱数 "を作るためにrand/srandを使用しています。"それは難しいことです。 'std :: vector'、' std :: iota'、 'std :: shuffle'を研究しています。 'std :: sort'も役に立ちます。 – user4581301

答えて

0

このコードは有益で、あなたの学習を支援するためのものです他のコメントで述べたように、それは最適ではありません。

void randNr(int tal[]) { 
    int count = 0; 
    while (count < SIZE) { 
     int number = rand() % 35 + 1; // range [1, 35] 

     int index = 0; 
     // find where the number should be placed 
     while (index < count && tal[index] < number) { 
      index++; 
     } 

     // if it is not a duplicate, shift other numbers up, then add it 
     if (tal[index] != number) { 
      for (int i = count; i >= index; i--) 
       tal[i + 1] = tal[i]; 
      tal[index] = number; 
      count++; 
     } 
    } 
} 
+0

ありがとうございました! :) –