c++ - 数组循环没有输出
问题描述
我将从一个 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 个循环的输出。
解决方案
看起来好像是那个错误,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));
推荐阅读
- php - 在 WooCommerce 产品变体中显示 ACF 自定义字段
- r - case_when 使用变量名更改数据值
- angular - Keycloak SSO with Angular & Spring Boot - 如何在重定向后使用 Spring Boot 获取令牌?
- git - Xcode git 结构问题
- hibernate - Spring JPA saveAndFlush() 行为与@DynamicUpdate/@DynamicInsert
- .net - 使用 gitlab-ci 在 digitalocean ubuntu .net 上停止服务器
- docker - 无法将 MySQL 服务器连接到 Docker 中的 Spring 应用程序?
- php - 获取计数大于特定数字的所有记录
- python - 无法规范化熊猫中的嵌套 Json
- node.js - 在 React 和 NodeJS 之间发布请求(处理响应)