Δημοσιεύτηκε: 05 Απρ 2012, 12:30
migf1 έγραψε:Πρέπει να υπάρχει μια συνθήκη η οποία θα μετακινεί τους indexers στην επόμενη θέση, όταν έχει ολοκληρωθεί ο έλεγχος σε ένα ζευγάρι αριθμών.
Αν έχουμε π.χ. τους αριθμούς...
- Κώδικας: Επιλογή όλων
-100 -35 10 20
ξεκινάμε με istart=0, iend = 3, minsum = LONG_MAX και έχουμε...
- Μορφοποιημένος Κώδικας: Επιλογή όλων
1η επανάληψη:
sum = buf[ istart ] + buf[ iend ]; // sum = -80
if ( abs(sum) < abs(minsum) ) // 80 < LONG_MAX ? YES
{
minsum = sum; // minsum = -80
}
if ( sum < 0 ) // -80 < 0, get inside
istart++; // istart = 1
else
iend--;
2η επανάληψη:
sum = buf[ istart ] + buf[ iend ]; // sum = -15
if ( abs(sum) < abs(minsum) ) // 15 < 80 ? YES
{
minsum = sum; // minsum = -15
}
if ( sum < 0 ) // -15 < 0, get inside
istart++; // istart = 2
else
iend--;
3η επανάληψη:
sum = buf[ istart ] + buf[ iend ]; // sum = 30
if ( abs(sum) < abs(minsum) ) // 30 < -15 ? NO!
{
minsum = sum; // minsum = -15
}
if ( sum < 0 ) // 30 < 0 ? NO!
istart++; // istart = 2
else // 30 >= 0 ? YES
iend--; // iend = 2
Και γιατί όταν είναι το sum < 0 αυξάνεται το istart και όχι το iend; Το ίδιο και για το όταν το sum > 0.