为什么只有在C ++中使用rand()函数时,循环才会运行1或2次

时间:2019-04-10 17:41:16

标签: c++

我想为我的程序生成随机测试用例,但运行1或2次后崩溃。 我已经使用rand()函数为随机测试用例生成随机数 但它在一两次或有时两次后不会运行..并且不会生成任何随机数。该程序只是退出。

#include<bits/stdc++.h>
#include<ctime>
#include <time.h>
using namespace std;

long long int naive(long long int arr[],long long int n){
    long long int max=-1;
    for(long long int i=0;i<n;i++)
    {
        for(long long int j=0;j<n;j++){
            if(arr[i]%arr[j] > max){
                max = arr[i]%arr[j];
            }
        }
    }
    return max;
}

long long int efficent(long long int arr[],long long int n){
    long long int max1=0,max2=0;
    for(long long int i=0;i<n;i++){
         if (arr[i] > max1) 
        { 
            max2 = max1; 
            max1 = arr[i]; 
        } 
        else if (arr[i] > max2 && arr[i] != max1) 
            max2 = arr[i]; 
    }
    return max2%max1;
}

int main(){
    srand(time(0));
    long long int count=0;
    int t=10;
    while(t--){
      long long int n;
      n = rand()%10;
      long long int arr[n];
      for(long long int i=0;i<n;i++){
        arr[i] = rand()%10;
      }
      long long int a,b;
      a = naive(arr,n);
      b = efficent(arr,n);
      if(a == b)
        cout<<"Naive : "<<a<<"\tEfficent : "<<b<<"\n";
      else{
        cout<<"\nNot Equal."<<"\nCount : "<<++count<<endl;
        cout<<"Naive : "<<a<<"\tEfficent : "<<b<<"\n";
      }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:2)

除了内存泄漏和未在其他答案中正确声明可变大小的数组外,问题还在于您正在对可能为0的值执行mod操作。这将迫使您的程序退出。要解决此问题,请更改

arr[i] = rand()%10;

类似

arr[i] = rand()%10+1;

防止被0除。

编辑:如@Michael Dorgan所述,您可能应该对n做同样的事情。更改

n = rand()%10;

n = rand()%10+1;

防止分配0个长度的数组。

答案 1 :(得分:0)

此代码有问题:

while(t--){
    long long int n;
    n = rand()%10;
    long long int arr[n];
    for(long long int i=0;i<n;i++){
    arr[i] = rand()%10;
    }

如果需要可变大小的数组,则应在long long int * arr = new long long int[n];块的最后一个大括号之前使用delete[] arr;while