我想为我的程序生成随机测试用例,但运行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;
}
答案 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
。