1

我正在尝试编写为彩票生成三位数字并且用户输入三位数字的程序。

  • 如果用户输入与彩票的顺序完全一致,则奖金为 10,000 美元。
  • 如果用户输入与彩票匹配,则奖金为 3,000 美元。
  • 如果用户输入的一位数字与彩票中的一位数字匹配,则奖金为 1,000 美元。

但我没有得到任何正确的结果。

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";
4

1 回答 1

1

如果块不正确,您在第二个和第三个中的测试条件。

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";
于 2013-02-02T06:01:31.113 回答