C++ 算法崩溃 int函数(inta[],intn) { int i=0; 整数和=0; 整数金额=0; 而(i 0){ 总和=总和+A[i]; 金额++; } 否则{ i++; } } 而(!(i0){ 返回金额/金额; }否则{ 返回0; } } }

C++ 算法崩溃 int函数(inta[],intn) { int i=0; 整数和=0; 整数金额=0; 而(i 0){ 总和=总和+A[i]; 金额++; } 否则{ i++; } } 而(!(i0){ 返回金额/金额; }否则{ 返回0; } } },c++,C++,我正在生成0-10之间的随机数字数组,我试图将其用于此算法,但我一直得到结果6422260。有人能告诉我应该如何处理此问题吗 int function(int A[], int n) { int i = 0; int sum = 0; int amount = 0; while(i<n) { if(A[i] > 0) { sum=sum+A[i]; amount++;

我正在生成0-10之间的随机数字数组,我试图将其用于此算法,但我一直得到结果6422260。有人能告诉我应该如何处理此问题吗

int function(int A[], int n)
{

    int i = 0;
    int sum = 0;
    int amount = 0;

    while(i<n) {
        if(A[i] > 0) {
            sum=sum+A[i];
            amount++;
        }
        else {
            i++;
        }
    }
    while(!(i<n)) {
        if(ile>0){
            return sum/amount;
        } else {
            return 0;
        }
    }

}

intn;
cin>>n;
int-arr[n];
srand(时间(空));
对于(int i=0;i<10;i++)
{
arr[i]=rand()%10;
}
功能(arr,n);

以下是您的问题的解决方案:

   int n;
    cin >> n;
    int arr[n];
    srand(time(NULL));

    for (int i = 0; i < 10; i++)
    {
     arr[i] = rand() % 10;
    }
    function(arr, n);

#包括
#包括
空隙填充(内部arr[]);
int随机(int-from,int-to);
使用名称空间std;
内部主(空)
{
int-arr[10];
填充(arr);

对于(int i=0;i@alkantra,您的问题不是生成随机数。基本上,您的问题是问错了。如果需要,应该将其分开:

  • 这个代码在做什么
  • 如何生成随机序列
  • 您尝试实现的算法用于计算算术平均值(或简单的平均值)。如果您记得在学校学习的算术平均值计算公式,则公式为:

    #include <random>
    #include <iostream>
    
    void fill(int arr[]); 
    int random(int from, int to);
    
    using namespace std;
    
    int main(void)
    {
        int arr[10];
        fill(arr);
        for(int i = 0; i<10; i++)
            printf("%d ", arr[i]);
     
        return 0;
    }
    
    void fill(int arr[]){
        for(int i=0;i<(*(&arr + 1) - arr);i++){
            arr[i] = random(0, 10);//adjust accordngly
        }
    }
    
    int random(int from, int to){
        std::random_device dev;
        std::mt19937 rng(dev());
        std::uniform_int_distribution<std::mt19937::result_type> dist6(from, to); // distribution in range [from, to]
        return dist6(rng);
    }
    
    在哪里

    sum-所有数字的总和(当然是给定数组[])

    n-给定数组中的数字计数[]

    sum变量的作用是对所有给定的数字求和,如果不等于
    0
    ,那么
    n
    (在您的代码中
    amount
    )只会对添加到
    sum
    中的每个数字增加。 最后,函数应该返回,如公式所示,sum/amount。我可以编写这段代码,即整个程序(除了random()),尽管这很简单,所以我将留给您

    关于随机图书馆,我知道的不多,但是网上可能有资源,所以慢慢来


    为什么函数没有while循环外的return语句while(!(i
    while(!(i(!(i表单初始值是假的吗?@Abramalekji,我想我写错了:/我在我的帖子中添加了算法应该是什么样子的,你能检查我做错了什么吗?要回答帖子中的问题,你可以通过打开编译器警告并启用将警告视为错误来处理你正在使用的任何工具链。任何值得使用它的编译器its将识别
    函数
    有清晰的路径,不返回确定的值,但声明它将返回
    int
    .Related,
    int amount=0;
    紧跟
    while(amount>0)
    显然永远不会进入外部循环,因此您将直接进入函数的末尾,其中..是的,没有指定的返回值。您能看到吗,这是算法,我正在尝试将其转换为代码,但我遇到了麻烦。如果sb不同意,请看一看图片,由该家伙共享的链接显示注意,不要看代码,反正它是错的,请看这个链接上的方框图
                    arithmetic mean = sum/n