编写一个程序,从一包八个物体中随机选择 每个物体可以是红色,蓝色,橙色或绿色,也可以是球形或立方体 假设每个组合包含一个物体(一个红球,一个红色 红色立方体,一个橙色球,一个橙色立方体,等等)。编写类似于的代码 例5.3,使用两个字符串数组 - 一个用于识别颜色,另一个用于识别颜色 识别形状。
我正在尝试编写一个程序来执行上述练习 - 我遇到的问题是每次都可以多次选择相同的对象。
这是到目前为止的代码
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int rand_0toN1(int n);
void choose_object();
char *colour[4] =
{"Red", "Blue", "Orange", "Green"};
char *object[2] =
{"Ball", "Cube"};
int main()
{
int n, i;
srand(time(NULL)); // Set seed for randomizing.
while (1) {
cout << "Enter no. of objects to draw ";
cout << "(0 to exit): ";
cin >> n;
if (n == 0)
break;
for (i = 1; i <= n; i++)
choose_object();
}
return 0;
}
void choose_object() {
int c; // Random index (0 thru 4) into
// colours array
int o; // Random index (0 thru 2) into
// object array
c = rand_0toN1(4);
o = rand_0toN1(2);
cout << colour[c] << "," << object[o] << endl;
}
int rand_0toN1(int n) {
return rand() % n;
}
答案 0 :(得分:2)
让我们试着通过一个真实的世界类比来解决这个问题:
假设你有一大块大理石,上面列出的颜色。它是如此巨大(无限大小!),你总是有同样的机会画一个给定颜色的大理石,每次总是1/4。
你将如何在现实生活中做到这一点?您是否只是随意挑选,在绘制时将大理石拉开?或者你可能会保留一些你已经画过的东西?
或者也许你在罐子里只有一个......你不会把它放回去吗?因为那就是你在这里所做的一切。
这些思路中的每一条都将引导您找到一个好的解决方案。我不想提供代码或任何东西,因为这种分配教会你如何像计算机一样思考。
答案 1 :(得分:0)
由于这是作业,我不打算给出确切的答案,而是描述你可以做的事情:
这些将放在你的choose_object()
子程序中。您可以在while()
循环中执行此操作,例如:
int seen_before = 0;
while(!seen_before) {
pick your random numbers
if(numbers not in list) {
add to list
break
}
}