首页 > 解决方案 > 数组循环没有输出

问题描述

我将从一个 24 的瓮中抽出 3 个球,然后将这些球所代表的总折扣相加。抽完球后我不能更换球,所以不能重复抽球。折扣为 1、2、3、4、5、6、7、8,各有 3 个。

我对这个问题的解决方案是创建多个 while 循环,这些循环从 24 个中推出并重新推出,直到没有重复出现。我过去做过这样的循环,它会循环随机数,直到选择了一个非重复的并且它工作正常,所以我以同样的方式设置了这个程序。

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

using namespace std;

int draw(int urn[], int draws[]);

int main()
{
    int discountSum,discount;
    int urn[24]={1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,7,8,8,8};
    int draws[1000]={0};
    draw(urn,draws);
    cin >> discount;
    int averageDiscount=discount/1000;


    return 0;
}

int draw(int urn[], int draws[])
{
    static int discountSum=0;
    int i; //simulations counter
    int ball1, ball2, ball3;
    int score1, score2, score3;
    int totalDiscount;
    srand(time(0));

    for(i=0;i<1000;i++)
    {
        ball1=rand()%24;
        while (ball2==ball1)
        {
            ball2=rand()%24;
        }
        while ((ball3==ball2)||(ball3==ball1))
        {
            ball3=rand()%24;
        }
        score1=urn[ball1];
        score2=urn[ball2];
        score3=urn[ball3];
        totalDiscount=score1+score2+score3;
        draws[i]=totalDiscount;
        cout << "1) " << draws[i] << " percent discount.\n";
        discountSum+=totalDiscount;
    }
    return discountSum;
}

当我运行此代码时,程序运行时没有收到错误,而是没有输出,并返回一个负垃圾值而不是 0。我希望看到从每个折扣到第 1000 个循环的输出。

标签: c++arrays

解决方案


看起来好像是那个错误,ball2并且ball3在将它们设置为任何内容之前进行了比较。它们甚至从未初始化,这可能是您的“垃圾值”的原因。如果您在比较之前“绘制”每个球,它可能会起作用,例如:

ball1=rand()%24;
ball2=rand()%24;
while (ball2==ball1)
{
    ball2=rand()%24;
}
ball3=rand()%24;
while ((ball3==ball2)||(ball3==ball1))
{
    ball3=rand()%24;
}

更好的方法是使用do...while循环,它总是运行一次,如:

ball1=rand()%24;
do
{
    ball2=rand()%24;
} while (ball2==ball1);
do
{
    ball3=rand()%24;
} while ((ball3==ball2)||(ball3==ball1));

推荐阅读