【问题标题】:c++ normalize an arrayC++ 规范化一个数组
【发布时间】:2016-06-04 00:16:05
【问题描述】:

我需要标准化一个数组,我找到可以是任意数字的最大值。我必须使用 cout 输出这个数字并将其表示为“x”多少次。问题是我最多只能有 60 个 x。如果我的最大值为 500,我需要将其显示为 60 'x' 并将我的整个数组标准化为该值。我编写的代码如下。

void RollDice() {  
int DieFace[6];
int Rolls = 0;
int Seed = 0;
int Random = 0; 
int i = 0; 
char X = 'x';

DieFace[0] = 0;
DieFace[1] = 0;
DieFace[2] = 0;
DieFace[3] = 0;
DieFace[4] = 0;
DieFace[5] = 0; 


cout << "Enter number of times dice will be rolled. "; //output to user
cin >> Rolls; //get rolls
cout << endl;


cout << "Enter desired seed number. "; //output to user
cin >> Seed; //get seed
cout << endl;
srand(Seed);


for (int i = 0; i < Rolls; ++i) { //loop for RNG
Random = 1 + rand() % 6;

// boolean to get Face
if (Random == 1)
    DieFace[0] = DieFace[0] + 1;
else if (Random == 2)
    DieFace[1] = DieFace[1] + 1;
else if (Random == 3)
    DieFace[2] = DieFace[2] + 1;
else if (Random == 4)
    DieFace[3] = DieFace[3] + 1;
else if (Random == 5)
    DieFace[4] = DieFace[4] + 1;
else if (Random == 6)
    DieFace[5] = DieFace[5] + 1;
} 

for (i = 0; i < 6; i++) {
cout << i + 1 << " Was Rolled: " << DieFace[i] << " Times." << endl;
}
cout << endl;

int Max = std::max({DieFace[0], DieFace[1], DieFace[2], DieFace[3], DieFace[4], DieFace[5] });   // find max value 

【问题讨论】:

  • [OT] 你可以通过DieFace[Random - 1]++;简化你的else if
  • 要规范化,你必须使用float/double,否则你的int数组中只有0/1。
  • @Jarod42 所以简单地把它改成 double DieFace[6] 就可以解决这个问题?那么我将如何规范化数组。
  • 请明确指定您希望将最大的 some 打印为 60 的因子,然后将该因子打印为 'x' 字面意思。例如如果 max=500, int factor = 500/60 = 8, for (int i=0; i

标签: c++ arrays normalization


【解决方案1】:

假设您的Max 是 500。如果将其乘以 60,然后除以 500,则结果正好是 60。如果您有另一个值是最大值 (250) 的一半,则乘以 60 得到 15000,然后除以 500 得到 30

所以简单的解决方案是:将所有结果乘以期望最大值,然后除以实际最大值。

您不需要double,即使评论声称如此。 500*60 不能溢出。不过,使用long 可能是明智之举,因为使用int 会将其切得很近。 600*60 可能会溢出 int (>32767),但 long 会溢出 20 亿。

【讨论】:

  • @siphr:不,我很确定我是对的。您想打印 60 个 x。打印 8.3 x 甚至没有意义。 (我能得到的最接近的是 8.5:xxxxxxxx&gt; ;))
  • 是的,我相信你是对的,我认为这个问题可以做一些澄清。
【解决方案2】:

获得最高数量的 DieFace,如果它高于你的最大值,你必须按比例缩小它们(例如这样):

    int Max=0;
    for (int i = 0; i < 6; i++) {
        if (DieFace[i]>Max) Max = DieFace[i];
    }
    for ( int i=0;i<6;i++) {
        cout << i << ":" ;
        int numHashes = DieFace[i];
        if (Max > 60) {
            numHashes = DieFace[i]*60/Max;
        }
        for (int j=0;j<numHashes;j++)
            cout << "#";
        cout << endl;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-13
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多