У меня есть два массива, я хотел вывести только последний, но в выводе элемент просто получил значение мусора.но если я напечатал первый массив перед ним, то значение мусора во втором массиве больше не выводится (ну, мне пришлось скомпилировать и запустить 3/4 раза, чтобы получить правильное значение один раз, оставшиеся 2/3раз я получаю значение мусора)
(я запускаю свой код, не печатая первый массив на codechef.com/ide, и каждый раз он выдает желаемый результат.)
, поэтому у меня двавопросы.
почему это произошло?
почему это произошло только с моим, а не с oj?
я пытался реализовать сборку кучи, то есть взять массив a , поместить этот массив в другой массив с именем heap таким образом, чтобы куча следует за свойством двоичная минимальная куча .наконец, выведите элементы heap .когда я компилировал и запускал его, он выводил значение мусора вместо значения определенного элемента каждый раз.затем, чтобы отладить его, я взял цикл перед печатью heap , чтобы напечатать массив a , чтобы проверить, правильно ли он принимает входные данные.на этот раз массив heap был напечатан правильно!но когда я снова скомпилировал и запустил его, он дал мне то же самое значение мусора вместо значения элемента, как раньше.я только начал компилировать и запускать код несколько раз.я заметил, что в каждой 3/4 компиляции он давал правильный ответ только один раз.
позже я отправлял свой код в ide codechef, на этот раз я каждый раз получал правильный вывод без печати дополнительного массива а .
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
int a[10];
for (int i = 0; i < 6; i++)
{
cin >> a[i];
}
int heap[10];
for (int i = 0, h = 1; i < 6; i++, h++)
{
if(h == 1) heap[h] = a[i];
else{
heap[h] = a[i];
int k = h;
//checking if the new heap element violates the heap property
//if it does then swap with it's parent , and repeat
while(k){
if(heap[k] < heap[k/2]) swap(heap[k], heap[k/2]);
k /= 2;
}
}
}
/* if this part is executed then the heap printing
// part prints the correct heap array atleast one time
// in every 3 or more than 3 "build & run" without any garbage value
//if not executed, then the heap printing part prints a
//garbage value each and every time
*/
// weird start
//prints the main array
// for (int i = 0; i <= 5; ++i)
// {
// cout << a[i] <<' ';
// }
// cout << endl;
//weird end
//heap printing part
for (int i = 1; i <= 6; ++i)
{
cout << heap[i] << ' ';
}
cout << endl;
return 0;
}
для ввода: 6 5 1 4 2 3
я ожидал: 1 2 3 6 4 5
я получил: 2 4 3 6 5 4199040
(редактор: возвышенный текст и кодовые блоки и компилятор: minGW)
обновление: замена while(k)
на while(k/2)
выполнила работу по выводу ответа без какой-либо помощи при печати другого массива. но как код сгенерировал два разных вывода в нескольких операциях build & run на моем устройстве?и он каждый раз выводил правильный ответ в онлайн-идее, но не в моем. ( это был главный вопрос на самом деле )