2011-12-15 66 views
2

编写一个随机从八个对象中选择一个程序的程序。
每个物体可以是红色,蓝色,橙色或绿色,它可以是球体或立方体。
假设袋子中每个组合包含一个物体(一个红球,一个
红色立方体,一个橙色球,一个橙色立方体等等)。编写类似于
的代码 例5.3,使用两个字符串数组 - 一个用于识别颜色,另一个用于识别形状
C++选择多个不重复的随机项目

我想写一个程序来执行上述练习 - 我遇到的问题是同一个对象可以每次选择多次。

这是到目前为止的代码

#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; 
} 
+3

标准程序是生成的可能性列表,随机播放它们,然后返回那些在(洗牌)的顺序。 – 2011-12-15 23:07:09

+0

@MooingDuck对于我见过的这种类型的东西,这不是标准。设想10个标准,每个标准有5个选项 - 您想要生成近1000万个条目来寻找少数? : - \ – corsiKa 2011-12-15 23:11:36

回答

0

由于这是家庭作业,我不会给出一个确切的答案,但描述你可以做什么:

  1. 请您已经选择的对象列表。
  2. 选择一个对象后,将该对象与您已选择的对象列表进行比较。如果它在列表中,请选择另一个对象。如果它不在列表中,请将其添加到列表中。
  3. 确保你不尽量选择超过800点的对象,否则你会在一个无限循环最终在第2部分

这些会去你的choose_object()子程序。你可以做一个while()循环,是这样的:

int seen_before = 0; 
while(!seen_before) { 
    pick your random numbers 
    if(numbers not in list) { 
    add to list 
    break 
    } 
} 
2

让我们通过制作一个真实世界的比喻来解决这个问题:

比方说,你有弹珠的一个巨大的罐子,上面列出的颜色。它是如此巨大(无限大小!),你总是有同样的机会画一个给定颜色的大理石,每次总是四分之一。

你会如何在现实生活中做到这一点?你会不会随意采摘,在画大理石时将它们夹在中间?或者你会保留一些你已经绘制的东西的清单?

或者你也许只有一个在罐子里......你不会把它放回去吗?因为这就是你在这里做的事情。

这些思想路径中的每一条都会引导您找到一个好的解决方案。我不想提供代码或任何东西,因为这种任务是教你如何像计算机一样思考的任务。