C++ 比较彩票游戏中的数组值

C++ Comparing Array Values in Lottery Game

我正在制作一个彩票程序,我正在尝试制作一个函数来检查有多少用户的号码与中奖号码相同,并写出具有相同号码的不同奖励。代码编译得很好。我只是遇到创建函数以及在其中做什么的问题。

基本上,检查他们是否赢得了乐透游戏中的任何奖品。检查 UserTicket 数组中的每个数字以查看该数字是否在 WinningNums 数组中并计算匹配的数字。

显示:JACKPOT - 如果所有 7 个号码都正确,则为 100 万 显示:太棒了! - 100,000 美元,如果 6 个数字是正确的 显示:幸运的你! - 5,000 美元,如果 5 个数字是正确的 显示:不错 - 如果 4 个号码正确,则 100 美元 显示:FREE TICKET if 3 numbers are correct 显示:如果 2 个或更少的数字是正确的,则没有任何意义

我在这方面遇到了麻烦,我是 C++ 的新手,而且我只编写了几个月的代码。将不胜感激!

#include <iostream>
#include <ctime>
#include <cstdlib>
#include <string>

using namespace std;

void getLottoPicks(int userNums[], int size);
void genWinNums(int winNums[], int size);
void checkNums(int userNums[], int winNums[], int size);

int main()
{
    const int size = 7;
    int UserTicket[size];
    int WinningNums[size];
    char selection;
    string name;

    do
    {
        cout << "LITTLETON CITY LOTTO MODEL: " << endl;
        cout << "---------------------------" << endl;
        cout << "1) Play Lotto" << endl;
        cout << "q) Quit Program" << endl;
        cout << "Please make a selection : " << endl;
        cin >> selection;

        if (selection == '1')
        {
            cout << "Please enter your name: " << endl;
            cin.ignore();
            getline(cin, name);

            getLottoPicks(UserTicket, size);
            genWinNums(WinningNums, size);
            checkNums(int userNums[], int winNums[], int size);

            cout << name << "'s LOTTO RESULTS" << endl;
            cout << "----------------------" << endl;
            cout << "WINNING TICKET NUMBERS : " << endl;
            for(int i = 0; i < size; i++)
            {
            cout << WinningNums[i] << " ";
            }
            cout << endl;
            cout << name << "'s TICKET       : " << endl;
            for(int i = 0; i < size; i++)
            {
                cout << UserTicket[i] << " ";
            }
            cout << endl;

        }
        else if (selection == 'q')
        {
            cout << "You have chosen to quit the program. Thank you for 
            using!" << endl;
        }
        else
        {
            cout << "Invalid selection. Please try again." << endl;
        }

    } while (selection != 'q');

    return 0;
}
void getLottoPicks(int userNums[], int size)
{
    for (int times = 0; times < size; times++)
    {
        int input;
        cout << "selection #" << times + 1 << ": " << endl;
        cin >> input;

        bool isNotDuplicate = true;
        for (int i = 0; i < times; i++)
        {
            if (userNums[i] == input)
            {
                 isNotDuplicate = false;
            }
        }
        if (isNotDuplicate == true)
        {
             userNums[times] = input;
        }
        else
        {
             cout << "You already picked this number. Please enter a different number: " <<
             endl;
             times--;
        }
     }

}
void genWinNums(int winNums[], int size)
{
    srand((unsigned int)time(NULL));

    for (int times = 0; times < size; times++)
    {
        int i;
        bool isNotDuplicate = true;
        while (isNotDuplicate)
        {
            isNotDuplicate = false;
            i = 1 + rand() % 40;
            for (int j = 0; j < times; j++)
            {
                if (i == winNums[j])
                {
                    isNotDuplicate = true;
                }
            }  
        }
        winNums[times] = i;
    }
}
void checkNums(int userNums[], int winNums[], int size)
{

}

你应该做 2 个循环,像这样:

int checkNums(int userNums[], int winNums[], int size)
{
    int nums = 0;

    for(int i = 0; i < size; i++)
        for(int j = 0; j < size; j++)
            if(userNums[i] == winNums[j])
                nums++;
     
    return nums;
}

这个函数会return有多少个数字是正确的 如果您不关心顺序并且您确定没有数字可以在同一个数组中出现 2 次,则此方法有效。 如果您也想查看订单:

int checkNums(int userNums[], int winNums[], int size)
{
    int nums = 0;

    for(int i = 0; i < size; i++)
        if(userNums[i] == winNums[i])
            nums++;
     
    return nums;
}