无法在问题解决方案中执行输出逻辑

Can't execute output logic in problem solution

本文关键字:执行 输出 解决方案 问题      更新时间:2023-10-16

我必须编写一个代码来查找从总和等于给定数字的给定数组中打印出的两个数字。代码逻辑工作正常,但我卡在如何打印输出上。以下是代码和输出。如果有人能指出哪里出了问题,那将是有帮助的。


#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
std::vector<int> twosum(std::vector<int> nums, int target){
std::vector< pair<int,int> > nums2;
for(int i{} ; i < nums.size() ; ++i){
pair<int, int> temp (nums[i],i);
nums2.push_back(temp);
}
//Step1: Sort nums2
sort(nums2.begin(),nums2.end());
//Step2: Initialize i and j;
int i = 0;
int j = nums.size();
while(i < j){
if (nums2[i].first + nums2[j].first == target){

std::vector<int> t{nums2[i].second,nums2[j].second};
return t;
}
else if (nums2[i].first + nums2[j].first > target){
--j;
}
else{
++i;
}
}
}

int main()
{
std::vector<int> v;
int num;
int size;
int target;
cout << "Enter the size of the array: ";
cin >> size;
cout << "Enter the elements of the array: ";
for (int i = 0; i < size; ++i){
cin >> num;
v.push_back(num);
}
cout << "Enter the target: ";
cin >> target;
std::vector<int> result = twosum(v, target);

cout << "[ ";
for(auto c: result){
cout << " " << c << " ";
}
cout << " ]" << endl;
return 0;
}
Enter the elements of the array: 6 8 4 9 7 
Enter the target: 10
[  2  0  -1117705107  22006  -1117719848  22006  -1098561884  22006  -1098561884  22006  -1206902528  179987187  518904992  32767  0  0  -1117705184  22006  -300987497  32559  -112  -1  518905000  32767  -112  1  -1117720547  22006  0  0  790744989  -1810777720  -1117721488  22006  518904992  32767  0  0  0  0  -1061040227  -1073545583  -503328867  -1046274220  0  0  0  0  0  0  -291023053  32559  -291155272  32559  3449846  0  0  0  0  0  0  0  -1117721488  22006  518904992  32767  -1117721446  22006  518904984  32767  28  0  1  0  518910937  32767  0  0  518910948  32767  518910970  32767  518912486  32767  518912520  32767  518912543  32767  518912554  32767  518912565  32767  518912597  32767  518912617  32767  518912633  32767  518912644  32767  518912685  32767  518912702  32767  518912714  32767  518912737  32767  518912755  32767  518912788  32767  518912874  32767  518912891  32767  518912909  32767  518912930  32767  518912949  32767  518912968  32767  518912989  32767  518913074  32767  518913101  32767  518913125  32767  518913160  32767  518913188  32767  518913223  32767  518913236  32767  518913256  32767  518913272  32767  518913289  32767  518913307  32767  518913327  32767  518913345  32767  518913378  32767  518913430  32767  518913459  32767  518913474  32767  518913482  32767  518913500  32767  518913518  32767  518913562  32767  518913577  32767  518913631  32767  518913662  32767  518913703  32767  518913748  32767  518913852  32767  518913885  32767  518913965  32767  518913997  32767  518914016  32767  0  0  33  0  519389184  32767  16  0  -1075053569  0  6  0  4096  0  17  0  100  0  3  0  -1117724608  22006  4  0  56  0  5  0  9  0  7  0  -291090432  32559  8  0  0  0  9  0  -1117721488  22006  11  0  1000  0  12  0  1000  0  13  0  1000  0  14  0  1000  0  23  0  0  0  25  0  518905785  32767  26  0  0  0  31  0  518914029  32767  15  0  518905801  32767  0  0  0  0  270647808  -1167920200  -1522814966  -828375455  909670631  3421791  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  1865362944  1869377064  2715239  1414876227  1599227220  1298091337  1280656463  1769487685  1397489773  1280263007  1028870735  809333618  1030317114  859517232  1852586548  993079357  1832531507  808467816  1030320186  859516980  1869822515  993079357  1681536307  825245039  976565051  876438626  858995504  976302139  876438627  858995504  976302139  876442223  825441072  976302139  809331053  1970485808  993473341  1933193524  808664423  976434235  859660643  825506608  1031238714  876294195  2003778098  993276733  1933193780  926104948  976499771  809334885  842218289  1949182522  809333345  825441073  1949182522  809335399  825441073  1630415418  809329522  825441073  1630415418  809331314  825441073  1949182522  809335393  825441073  1814964794  809329000  825441073  1814964794  809317498  825441073  1814964794  809330810  825441073  1814964794  1029795194  859517232  774519345  1031433332  859517232  774519345  1031436404  859517232  774519345  1030716020  859517232  774519345  1031419764  859517232  774519345  1030777210  859517232  774519345  825245050  976302907  1029320234  859517232  774519345  809335396  825441073  1731078714  825245050  976302907  1919692330  825245050  976302907  2053910058  993079357  708456755  1870294062  993079357  708456755  1031436334  859517232  774519345  1031041914  859517232  774519345  1953725044  993079357  708456755  846881326  993079357  708456755  1031430702  859517232  774519345  1031430772  859517232  774519345  846881396  993079357  708456755  1031435310  859517232  774519345  1029858660  859517232  774519345  1030582386  859517232  774519345  1030906218  859517232  774519345  1030906231  859517232  774519345  1030906213  859517232  774519345  1030906227  859517232  774519345  1030906226  859517232  774519345  1031433313  859517232  774519345  1030054753  859517232  774519345  1030713210  859517232  774519345  1869181027  993079357  708456755  1031419694  859517232  774519345  809335410  825441073  1663969850  809329249  825441073  1999514170  809332073  825441073  1932405306  809332087  825441073  1680747066  809332087  825441073  1697524282  809329779  825441073  1781410362  809330544  892549937  1781410362  1030186352  859517232  774519349  1735420525  993079357  708457779  1886022958  809330533  892549937  1731078714  809330281  892549937  1647192634  809332845  892549937  1882073658  809332066  892549937  1882073658  809332071  892549937  1882073658  809332080  892549937  1949182522  809328999  892549937  2016291386  809332066  892549937  2016291386  809332080  892549937  1949182522  809330281  892549937  1949182522  1030121065  859517232  774519349  1030188656  859517232  774519349  1030190707  859517232  774519349  2053600883  993079357  708457779  1735290158  993079357  708457779  2019782702  993079357  708457779  1987013934  993079357  708457779  1735421230  993079357  708457779  1701866798  825245031  976565051  846016042  825245046  976565051  1802317354  825245046  976565051  1702309418  809332066  892549937  1865296442  809332071  892549937  1831742010  809317488  892549937  1831742010  809334324  892549937  1831742010  1031156848  859517232  774519349  1029861238  859517232  774519349  809333873  892549937  1848519226  809334389  892549937  1999514170  809334381  892549937  1630415418  809330291  892549937  1915628090  825245037  976565051  1836199466  809329270  892549937  1714301498  809329516  892549937  1630415418  809331062  892549937  1714301498  809331052  892549937  1714301498  809334380  892549937  1731078714  825245036  976565051  1818504746  993079357  708457779  1717794862  993079357  708457779  1685551150  993079357  708457779  1987410222  993079357  708457779  1835492142  993079357  708457779  1718445358  993079357  708457779  1986490158  993079357  708457779  2020044590  993079357  708457779  1667326254  993013821  708458035  1031102766  859516976  774519350  1667329126  993013821  708458035  1630825774  993013821  708458035  1684630830  993013821  708458035  1684630830  808467817  976630587  1802317354  808467809  976630587  1886203434  808467763  976630587  1886203434  808467811  976630587  1735339562  808467815  976630587  1634872874  993013821  708458035  1986098990  993013821  708458035  1634168622  993013821  708458035  1970302766  808467827  976630587  1886596650  808467832  976630587  1937255978  809330288  909327152  1162608698  1279480659  1027953487  1920169263  1852400175  1936026671  1885958259  1931812965  7546144  1598506072  1431192909  1163022431  1029196102  1836019303  1275080037  1028083265  1230990949  1229193294  1095520339  809123161  1330530048  1398752589  1280066888  1397052255  1313818963  1146047839  1651850565  1970564725  1280262912  1163153999  1950174546  1667593586  1919904879  1163089152  1296125522  1634549061  1802396025  1195661312  1314149983  3292498  1598575443  1213486401  1129272159  1915698507  1966042741  796026227  808464433  2036689711  1735289202  1752396591  1195661312  1397052255  1313818963  1027885407  1398079538  1832735301  1851881825  1162084459  1330924371  1163091792  1330205523  1651850574  1970564725  877940992  1598900575  1430540109  2017281356  1409314153  1146378309  1229016399  1380533326  1937059645  1752379250  795177569  1633906540  3106156  1297043015  1163157317  1313426770  1398754369  1162170947  1865366862  1731159922  1701670766  1919243311  1634625901  1668493164  1852138866  1650680111  1684093233  942759777  878655032  1597454648  1698117944  963011167  1697657190  1700934961  1464860727  1747926340  795176303  1635344749  1207987054  1027951951  1836017711  1634545509  1802396025  1480938496  1297040468  1028540737  1663921513  1768320623  1397948519  1195466568  1599360581  1027885392  842217266  1599361280  1162036033  1112101715  1414089801  3226969  1598506072  1397966163  1598967625  1162893652  825325629  1195661312  1413563487  1229217601  792548178  796029813  1918986355  1651847013  1970564725  1937059642  1869361010  795631971  1918986355  792342373  796029813  1918986355  792342373  796025206  794978668  1885433459  1701064548  1869900659  1146617968  1163091783  1330205523  1162108750  1330924371  1651850576  1970564725  1397376768  1111835743  1331644245  1431327829  1953709396  1920099684  1601138176  2020569712  1869364601  1751933283  745829231  775369265  774909488  741879600  3226170  1598772295  1430540109  1028867404  1818845543  1802789178  1769103917  6645604  1348423502  1498959698  1668246589  1869114465  824996979  808335154  808333358  975976495  1459630394  1329876553  1413566551  3292488  1297237332  1702131773  841837938  1868772917  7499628  1279608915  1647263052  1647275625  6845281  1598379094  1397900630  1028542281  842019381  1599361280  1298091337  1280656463  1651064133  1476424565  1229213517  1380272454  1765817683  1651064173  1224766325  1329815373  1195984462  1095258207  842876243  1195661312  1381319519  1414415698  1397048415  1347376203  1969386813  980776046  1297043015  1346830405  1195466567  1599360581  1330007625  1970417469  1937059694  825193061  791687216  1886744167  777203559  761753703  1852139361  976239220  1313275953  1598377295  1297237332  1279348297  1380275039  1162037590  774978109  1476408887  1398753092  1028931909  1952540019  1213399088  1028413004  1095499825  1096107854  1698514247  1313431406  7234874  1397572679  1230197573  1966952015  1953396066  1313276021  1598377295  1263748420  1599098708  1397966163  1598967625  1950172233  762538344  1680700265  1701998693  1702125923  1330380900  1296125511  1634549061  1802396025  1430406144  1163091795  1330205523  1430413134  1145134931  1397051972  1853177171  1882880105  1030255713  1853190703  1702065455  808529778  1647259696  1476424565  1381975876  1230261845  1147094349  792547913  795768178  1919251317  808464687  1096286256  1330140245  1498696018  1970417469  1937059694  825193061  791687216  795698279  1953849688  1769107304  1476426100  1130317636  1229344335  1229217607  792548178  795047013  795305080  761750648  1853186677  792360308  795047013  6775928  1213481296  1937059645  1869361010  795631971  1852400243  1937059642  1869361010  795631971  980314466  1920169263  1768059695  1966029422  1647276659  792358505  1852400243  1768042298  1966029422  1731162739  1936026977  1937059642  1869361010  795631971  1701667175  1932474995  795894126  7235938  1599294023  1430406468  1330929479  1396918608  542329405  1330795077  1397373778  1196379168  13Segmentation fault (core dumped)

输出出乎意料,让我担心逻辑是否正确。也许是语法或人为错误,因为我使用在线资源仔细检查了逻辑。请帮忙

你的向量越界了:

int j = nums.size() - 1;

此外,并非所有路径都会返回一些东西。您可能找不到一对总和为target.

您应该在 twosum 的末尾返回一些内容,例如

std::pair<int,int>{-1,-1};

一些性能改进

1: https://en.cppreference.com/w/cpp/container/vector/reserve

cout << "Enter the size of the array: ";
cin >> size;
v.reserve(size)

2:避免矢量复制std::vector<int> twosum(const std::vector<int> &nums, const int target)

3:https://en.cppreference.com/w/cpp/container/vector/emplace_back

nums2.reserve(nums.size())
for(int i{} ; i < nums.size() ; ++i){
pair<int, int> temp (nums[i],i);
nums2.emplace_back(temp);
}