2011-12-15 71 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

讓我們通過製作一個真實世界的比喻來解決這個問題:

比方說,你有彈珠的一個巨大的罐子,上面列出的顏色。它是如此巨大(無限大小!),你總是有同樣的機會畫一個給定顏色的大理石,每次總是四分之一。

你會如何在現實生活中做到這一點?你會不會隨意採摘,在畫大理石時將它們夾在中間?或者你會保留一些你已經繪製的東西的清單?

或者你也許只有一個在罐子裏......你不會把它放回去嗎?因爲這就是你在這裏做的事情。

這些思想路徑中的每一條都會引導您找到一個好的解決方案。我不想提供代碼或任何東西,因爲這種任務是教你如何像計算機一樣思考的任務。