【问题标题】:multiplication of random numbers different from zero非零随机数的乘法
【发布时间】:2020-06-01 20:12:15
【问题描述】:

我有一个生成 10 个随机数的代码,我需要计算非零数的总和和乘积,并显示已相乘的数字。我已经有了大部分代码,但我不知道如何将非零数字相乘然后显示它们。有人可以帮我吗?

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>

using namespace std;

int main()
{
    cout << "draws 10 numbers:" << endl;
    Sleep(1000);
    cout << endl;

    srand(time(0));
    int sum=0;
    int product=1;

    for(int i=0, value=0; i<10; i++, sum+=value, product*=value) 
    {
        value = rand()%10+0;
        Sleep(1000);
        cout << value << endl;
    }

    Sleep(1000);
    cout << "the sum is " << sum <<endl;
    cout << "the product is " << product <<endl;
    return 0;
  }

【问题讨论】:

  • 那么,你能用笔和纸将这些数字相乘并写出结果吗? 5,2,9,1?我问是因为我不确定你的问题是什么。
  • 使用 if 语句。如果你生成的数字为零,不要加乘。
  • 你需要使用if语句:if (value != 0) { ...do these steps... }
  • 代替反复推荐的if,您可以更优雅地确保没有0被绘制为随机数。尤其是这里value=0; 和这里value = rand()%10+0;,零会困扰你。
  • 自C++11以来,有更好的方法来生成随机数:en.cppreference.com/w/cpp/numeric/random/…,但请说明是否必须绘制10个数字并将非零相乘only值或您的任务是乘以 10 个随机数,它们都不同于零。

标签: c++ product draw


【解决方案1】:

首先,如果我们将加法和乘法移出 for 循环头,则更易于阅读和理解。

int sum = 0;
int value = 1;

for(int i = 0; i < 10; i++) 
{
  int value = rand() % 10;
  sum += value;
  product *= value;
  std::cout << value << std::::endl;
}

接下来,我们只想做if的乘法,value不等于0

int sum = 0;
int value = 1;

for(int i = 0; i < 10; i++) 
{
  int value = rand() % 10;
  sum += value;

  if(value != 0)
  {
    product *= value;
  }

  std::cout << value << std::::endl;
}

所以整个程序是这样的。

#include <iostream>
#include <cstdlib>
#include <ctime>

int main()
{
  std::cout << "draws 10 numbers:" << std::endl;

  srand(time(0));
  int sum = 0;
  int product = 1;
  int multiplied = 0;

  for(int i = 0; i < 10; i++)
  {
    int value = rand() % 10;
    sum += value;

    if(value != 0)
    {
      product *= value;
      multiplied += 1;
    }

    std::cout << value << " ";
  }

  std::cout << std::endl;
  std::cout << "the sum is " << sum << std::endl;
  std::cout << "the product is " << product << std::endl;
  std::cout << "numbers multiplied is " << multiplied << std::endl;
  return EXIT_SUCCESS;
}

【讨论】:

  • 非常感谢!但我仍然需要显示已经相乘的数字,我不知道该怎么做
  • 对不起,我必须显示已经相乘的数字,而不是相乘的数字
  • 如果生成数字 1,0,3,2 例如,需要打印 sum: 6, product, 6, numbers multiplied: 3?
  • 这正是它应该的样子
  • 然后你可以添加另一个计数器变量,每次你进入 if 语句 where (value != 0) 你可以增加计数器。然后在最后打印计数器变量
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多