Miért add rossz eredményt ez a kód? (c++)
Tehát az lenne a célja ,hogy meg mondja ,hogy a vektor melyik két eleme között legnagyobb a különbség.
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int>v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
int b=3;
for(int k=3;k<v.size();k++){ //Ez megszámolja ,hogy hányszor fusson le a következő ciklus.Nem ez okozza a probélmát szerintem.
b=b+k;
}
int i=0;
int c=0;
while(i<b){i++;
for(int k=0;k<v.size();k++){
if(c>v[i]-v[k]){c=v[i]-v[k];
}
}
}
cout<<c;
return 0;
}
Kezdjük ott, hogy azt állítod a program azt mondja meg, hogy melyik két elem közt a legnagyobb a különbség. De a programod a különbséget adja vissza és nem a két elemet.
Egyébként itt van egy gebasz:
if(c>v[i]-v[k]){c=v[i]-v[k];
Ez az algoritmus egyértelmű hogy a lehető legkisebb számra állítja c-t: Ha c NAGYOBB valaminél, akkor c legyen az a valami.
De ezzel a b-vel és k-val való bűvészkedéssel is bajok vannak. Minek kell azt a két 3-mast összeadni? Az a legelső for ciklus egyáltalán minek?
Ott is baj van hogy ha i=4, akkor még a while(i<b) igaz, és egyből megnöveled i-t eggyel. Mert v[5] nincs is.
Szerintem ti ezt mind túlbonyolítjátok - a legnagyobb különbség természetesen a legkisebb és a legnagyobb érték között lesz.
int main()
{
std::vector<int> v = { 1, 2, 3, 4, 5 };
int iMinIndex = std::distance(v.begin(), std::min_element(v.begin(), v.end()));
int iMaxIndex = std::distance(v.begin(), std::max_element(v.begin(), v.end()));
std::cout << "Vektor Indexe --> min szam: " << iMinIndex << " -- max szam: " << iMaxIndex << std::endl;
}
Megnézzük std::distance -el hogy hol vagyunk a vektor elejéhez képest, ezzel megkapva az effektív pozíciónkat a vektorban, aminek ez a vége:
Vektor Indexe --> min szam: 0 -- max szam: 4
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!