C++ 兰德号彩票计划

C++ 兰德号彩票计划,c++,numbers,C++,Numbers,我试图编写程序,生成三位数的彩票号码,用户输入三位数 如果用户输入的内容与彩票的确切顺序相符,则奖金为10000美元 如果用户输入与彩票匹配,则奖励为3000美元 如果用户输入中的一位数字与彩票中的一位数字匹配,则奖金为1000美元 但是我没有得到任何正确的结果 h1=rand() % 10; int h2=rand() % 10; int h3=rand() % 10; cout<<"Enter three digite number\n"; cin>>n1&g

我试图编写程序,生成三位数的彩票号码,用户输入三位数

  • 如果用户输入的内容与彩票的确切顺序相符,则奖金为10000美元
  • 如果用户输入与彩票匹配,则奖励为3000美元
  • 如果用户输入中的一位数字与彩票中的一位数字匹配,则奖金为1000美元
但是我没有得到任何正确的结果

h1=rand() % 10;

int h2=rand() % 10;
int h3=rand() % 10;

cout<<"Enter three digite number\n";
cin>>n1>>n2>>n3;

if(n1==h1&&n2==h2&&n3==h3)
    cout<<"you win 10.000 award\n";
else
    if(n1==h1||n1==h2||n1==h3&&n2==h1||n2==h2||n2==h3&&n3==h1||n3==h2||n3==h3)
        cout<<"you win 3,000\n";
    else
        if(n1==h1||n1==h2||n1==h3||n2==h1||n2==h2||n2==h3||n3==h1||n3==h2||n3==h3)
            cout<<"you win 1,000\n";
        else
            cout<<"you don't win anything sorry\n";
h1=rand()%10;
int h2=rand()%10;
int h3=rand()%10;
coutn1>>n2>>n3;
如果(n1==h1&&n2==h2&&n3==h3)

如果模块不正确,则第二和第三个模块中的测试条件不正确

if(n1==h1||n1==h2||n1==h3&&n2==h1||n2==h2||n2==h3&&n3==h1||n3==h2||n3==h3)
在这种测试条件下,存在许多问题

  • 首先,这容易短路。如果n1与h1或h2相匹配,则不会对其余条件进行测试。这同样适用于此后的每一次比较,请记住&&在这种情况下,短路时其两侧的两个条件都必须为真

  • 假设我们用括号来阻止这一点,那么您的条件对于任何顺序的所有三个匹配都是正确的

看到这两个问题,最好重新编写逻辑,因为这会使第三个块的操作变得多余。您的第三个块将运行特定的输入组合,而不是您期望它执行的操作


我认为编写程序逻辑的更好方法是单独比较每个字符,并为找到的匹配数维护一个计数器

int c=0, win;
if(n1==h1||n1==h2||n1==h3) c++;
if(n2==h1||n2==h2||n2==h3) c++;
if(n3==h1||n3==h2||n3==h3) c++;

if(c==3)
{
    //Check order of digits
    if(n1==h1&&n2==h2&&n3==h3) win = 10000;
    else win=3000 //All digits same but not in order
}
else if(c==2)
    win=3000
else if(c==1)
    win=1000
else
    win=0

if(win) cout<<"You win "<<win<<"\n";
else cout<<"you dont win anything\n";
int c=0,赢;
(n==H1,ηN1==H2·ηN1=H3)C++;
如果(n2==H1} n2==H2* n2==H3)C++;
如果(n3==H1,ωn3==H2,γn3==H3)C++;
如果(c==3)
{
//检查数字顺序
如果(n1==h1&&n2==h2&&n3==h3)赢=10000;
else win=3000//所有数字相同,但顺序不同
}
else如果(c==2)
赢=3000
else如果(c==1)
赢=1000
其他的
赢=0

如果(win)不能第二个和第三个if块中的测试条件不正确

if(n1==h1||n1==h2||n1==h3&&n2==h1||n2==h2||n2==h3&&n3==h1||n3==h2||n3==h3)
在这种测试条件下,存在许多问题

  • 首先,这容易短路。如果n1与h1或h2相匹配,则不会对其余条件进行测试。这同样适用于此后的每一次比较,请记住&&在这种情况下,短路时其两侧的两个条件都必须为真

  • 假设我们用括号来阻止这一点,那么您的条件对于任何顺序的所有三个匹配都是正确的

看到这两个问题,最好重新编写逻辑,因为这会使第三个块的操作变得多余。您的第三个块将运行特定的输入组合,而不是您期望它执行的操作


我认为编写程序逻辑的更好方法是单独比较每个字符,并为找到的匹配数维护一个计数器

int c=0, win;
if(n1==h1||n1==h2||n1==h3) c++;
if(n2==h1||n2==h2||n2==h3) c++;
if(n3==h1||n3==h2||n3==h3) c++;

if(c==3)
{
    //Check order of digits
    if(n1==h1&&n2==h2&&n3==h3) win = 10000;
    else win=3000 //All digits same but not in order
}
else if(c==2)
    win=3000
else if(c==1)
    win=1000
else
    win=0

if(win) cout<<"You win "<<win<<"\n";
else cout<<"you dont win anything\n";
int c=0,赢;
(n==H1,ηN1==H2·ηN1=H3)C++;
如果(n2==H1} n2==H2* n2==H3)C++;
如果(n3==H1,ωn3==H2,γn3==H3)C++;
如果(c==3)
{
//检查数字顺序
如果(n1==h1&&n2==h2&&n3==h3)赢=10000;
else win=3000//所有数字相同,但顺序不同
}
else如果(c==2)
赢=3000
else如果(c==1)
赢=1000
其他的
赢=0

如果(win)coutPerhaps,则有助于解释OP提供的解决方案为何无效。@Suno87如果有效,则选择此作为正确答案。也许有助于解释OP提供的解决方案为何无效。@Suno87如果有效,然后选择这个作为正确答案。你可以画两次(或三次)相同的数字吗?画得不均匀是可以接受的吗?你可以画两次(或三次)相同的数字是可以接受的吗?图纸分布不均匀是否可以接受?