Привет, сегодня был у меня самый странный день. Я новичок в программировании, решал задачу 160А но компилятор С++ сильно удивил меня.
По идею cout не должен влиять на логику (это же блин просто cout), но каким-то образом влияет.
С cout
Без cout
Вот мой (ужасный) код
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
int result = 0;
int point = 0;
int sum = 0;
cin >> n;
int a[n];
for (int i = 0; i < n; i++) {
cin >> a[i];
}
// sort
int temp;
int count = (sizeof(a)/sizeof(*a));
for(int i = 0; i < count; i++) {
for(int j = 0; j < count; j++) {
if(a[j] > a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
//reverse
int reverse_temp;
for (int i = 0; i < count/2; ++i) {
reverse_temp = a[count-i-1];
a[count-i-1] = a[i];
a[i] = reverse_temp;
}
for(int i = 0; i < count; i++) {
point = point + a[i];
// cout << "point: " << point << endl;
result = result + 1;
// cout << "result :" << result << endl;
for(int j = result; j < count; j++) {
sum = sum + a[j];
// cout << "sum: " << sum << endl;
}
if(point > sum) {
cout << "answer: " << result << endl;
break;
} else {
sum = 0;
}
}
return 0;
}
вылазим за массив?
Кстати, советую подзаботать STL. Есть например прекрасная функция swap, если уж не sort и не reverse
Change count to count-1 on line 20 and it should be fixed. This usually happens when you try to access element that is not part of the array, causing UB bug.
Thanks, it worked. I try not to allow such mistakes again)
Don't worry about it, I still make mistakes like this sometimes, I just get better at detecting such problems.
btw, u can sort array using
sort(a, a+n)
in nlogn. or even sort in decreasing order withsort(a, a+n, greater<int>());
and if you use vector, u can sort with
sort(a.begin(), a.end())
and in decreasing order withsort(a.begin(), a.end(), greater<int>());
and u can even reverse the vector with
reverse(a.begin(), a.end())