Closest number, C++
Условието на задачата: Write a program which finds the two closest (by value) integer numbers in an array and prints the absolute difference between them.
Input:
5
1 105 10 100 3
Output:
2 (The closest numbers are 1 and 3, abs(1,3) = 2)
Това е начинът, по който мисля, че трябва да се реши задачата:
int n;
cin>>n;
int arr[n];
int i;
for (i=0; i<n; i++)
{
cin>>arr[i];
}
int k = INT_MAX;
int m;
for(i=0; i<n; i++)
{
m = abs(arr[i], arr[i+1]);
if (m < k)
{
k = m;
}
cout<<endl;
cout<<k<<endl;
}
Може ли някой да ми помогне, защото явно това не е правилният код. Благодаря Ви!
Това няма да работи, ако n=1, т.е. ако имаме само едно число. Точно това е уловката в тази задача. Миналата седмица един колега беше пуснал тема за това. Аз съм го направил така
Единствено ми прави впечетление, дали i не трябва да върти до n - 1 ? Но това ще спести само 4 операции, със същия резултат от кода :)
Твоят код работи добре за повече числа. Обаче при n=1 джадж очаква 0 (това не го пише в условието на задачата), а твоят изход е INT_MAX. Един от тестовете е такъв и затова някои хора вземат само 80/100.
П.П. А моя код е на ниво Софтюни :)