有一个从 1 到 500 的数组。在其中,您需要将数字分成对,以便这些数字的总和是质数。在它显示正确的前3个数字之后,其余的都是不可理解的(太大,即不等于简单的数字)。
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
void amount(int array[], int &lenAr);
int main(void)
{
setlocale(LC_ALL, "Russian");
int a, length_array;
length_array = 500;
int *arr = new int[length_array];
a = 1;
for (int i = 0; i < 500; i++) {
arr[i] = a + i;
}
amount(arr, length_array);
system("pause");
return 0;
}
void amount(int array[], int &lenAr)
{
int *result = new int[500];
int n, i;
int alpha, delta;
bool isPrime = true;
for (int r = 0; r < 500; r++) {
alpha = r;
delta = alpha + 1;
n = array[alpha] + array[delta];
for (i = 2; i <= (sqrt(abs(n))); i++) {
if (n%i == 0) {
isPrime = false;
}
}
if (isPrime) {
result[r] = n;
}
}
cout << "Все числа" << endl;
for (int counter = 0; counter < lenAr; counter++)
{
cout << array[counter] << " ";
}
cout << endl << "Простые числа" << endl;
for (int counter = 0; counter < 30; counter++)
{
cout << result[counter] << " ";
}
cout << endl;
delete[] array;
delete[] result;
}
所有错误都在这里
alpha == 499delta == 500越界数组时result数组。在这种情况下,按第一个数字的索引写下来。因此,数组中的一堆元素result未初始化并包含垃圾。你看这个垃圾这是或多或少经过修饰的代码