迷途的启木菌 2020-12-05 13:45 采纳率: 50%
浏览 180

生成随机数rand()报错0x00A326FE 处有未经处理的异常

请大佬解疑,我之前也一直这么使用的,但从昨天开始,只要使用随机生成的函数,就会出现这个错误,导致,结果随机生成,偶尔能工运行出来,大多数时候运行报错。

全部代码如下:

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;

int Rand(const int start, const int end)
{
	srand((unsigned)time(NULL));
	return rand() % (end - start + 1) + start;
}

int Partition(int a[], int start, int end)
{
	int i = start, j = end + 1;
	int log = a[start];
	while (true)
	{
		while (a[++i] < log&&i < end);//防止运行到未定义的区域
		while (a[--j] > log);//最坏的情况下,运行到a[start]将推出循环
		if (i >= j)
		{
			break;
		}
		swap(a[i], a[j]);
	}
	a[start] = a[j];
	a[j] = log;
	return j;
}

int RandomziedPartition(int a[], int start, int end)//j数据总数的一半
{
	int log = Rand(start, end);
	swap(a[start], a[log]);
	return Partition(a,  start,  end);
}

int RandomizedSelect(int a[], int start, int end, int k)//end是数组的下标,而不是数据的数目
{
	if (start == end)
	{
		return a[start];
	}

	int i = RandomziedPartition(a,  start,  end), j = end - i + 1;//j数据总数的一半
	if (k <= j)
	{
		return RandomizedSelect(a, start,  i,  k);
	}
	else
	{
		return RandomizedSelect( a,  i + 1,  end,  k - j);//由于现在检测的是左部分,所以求的第k小的数据也应该减去总数据数目的一半
	}
}

int main(void)
{
	int a[10];
	srand((unsigned)time(NULL));
	for (int i = 0; i < 10; i++)
	{
		a[i] = rand() % 100 + 1;//生成1——100的随机数
		cout << a[i] << " ";
	}
	cout << endl;
	int k;
	cout << "请输入需要查找的第k小的数据的k:";
	cin >> k;
	cout << "该数组的第" << k << "小的数据为:" << RandomizedSelect(a, 0, 9, k) << endl;

	return 0;
}
  • 写回答

5条回答 默认 最新

  • include_iostream_ 2020-12-05 14:51
    关注

    看报错信息,应该是传入了end刚好是start加上1的参数。这会导致取模时出现除以0错误。

    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog