Блог пользователя PostMunwai

Автор PostMunwai, история, 8 лет назад, По-русски

Привет, сегодня был у меня самый странный день. Я новичок в программировании, решал задачу 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;
}
  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится +13 Проголосовать: не нравится
for(int j = 0; j < count; j++) {
           ... a[j+1]) {

вылазим за массив?

»
8 лет назад, # |
  Проголосовать: нравится +21 Проголосовать: не нравится

Кстати, советую подзаботать STL. Есть например прекрасная функция swap, если уж не sort и не reverse

»
8 лет назад, # |
  Проголосовать: нравится +3 Проголосовать: не нравится

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.

  • »
    »
    8 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится

    Thanks, it worked. I try not to allow such mistakes again)

    • »
      »
      »
      8 лет назад, # ^ |
      Rev. 3   Проголосовать: нравится 0 Проголосовать: не нравится

      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 with sort(a, a+n, greater<int>());

      and if you use vector, u can sort with sort(a.begin(), a.end()) and in decreasing order with sort(a.begin(), a.end(), greater<int>());

      and u can even reverse the vector with reverse(a.begin(), a.end())