다음의 문제를 해결하기 위해 다음을 작성했습니다. "정렬되지 않은 숫자의 목록이 주어지면 두 숫자 사이의 절대 차이가 가장 작은 숫자를 찾을 수 있습니까? 여러 쌍이 있으면 모두 찾으십시오. " 여기힙 손상 및 프로그램 충돌 발생
는 values.I는 반환 형식으로 포인터를 전달 잘못 아무것도 볼 해달라고 결과를 인쇄 할 때
#include <map>
#include <set>
#include <list>
#include <cmath>
#include <ctime>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <cstdio>
#include <limits>
#include <vector>
#include <cstdlib>
#include <numeric>
#include <sstream>
#include <iostream>
#include <algorithm>
using namespace std;
int* smallestDiff(vector<int> a,int &noOfPairs)
{
sort(a.begin(),a.end());
int * arr = new int(a.size()* sizeof(int) *2);
bool bfoundDiff = false;
int smallestDiff =0;
int num1,num2;
for(size_t i=0;i<a.size()-1;i++)
{
num1 = a[i];
num2 = a[i+1];
int newDiff = num2-num1;
if(!bfoundDiff || newDiff < smallestDiff)
{
smallestDiff = newDiff;
arr[0] = num1;
arr[1]= num2;
noOfPairs = 1;
bfoundDiff = true;
}
}
for(size_t i=0;i<a.size()-1;i++)
{
num1 = a[i];
num2 = a[i+1];
int newDiff = num2-num1;
if(newDiff == smallestDiff && num1!=arr[0] && num2!=arr[1])
{
arr[noOfPairs*2] = num1;
arr[noOfPairs*2 + 1] = num2;
++noOfPairs;
}
}
return arr;
}
int main() {
int _a_size;
cin >> _a_size;
cin.ignore (std::numeric_limits<std::streamsize>::max(), '\n');
vector<int> _a;
int _a_item;
for(int _a_i=0; _a_i<_a_size; _a_i++) {
cin >> _a_item;
_a.push_back(_a_item);
}
int noOfPairs=0;
int *result =smallestDiff(_a,noOfPairs);
int noOfelems = noOfPairs*2;
for(int i=0;i<noOfelems;++i)
{
cout<< *(result+i)<<" ";
}
return 0;
}
지금 프로그램이 논리하지만 충돌에 따라 잘 실행되는 코드
입니다.여기에 문제가 있습니까?
당신은 다음 줄에 오타를했습니다
전달할 입력은 무엇입니까? – lolando
5 항목 수와 숫자가 1 2 3 4 5 – anand
출력이 충돌하는 경우 어떻게 프로그램 논리가 좋은지 어떻게 알 수 있습니까? 나는 int * 배열을 선언하고 그 안에서 포인터를 사용하는 것과 관련이 있다고 생각한다. 벡터로 전환하는 것이 가장 쉽고 최상의 솔루션 인 것 같습니다. – dornhege