C/C++ Сжатие массива( удалить элементы)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int main(int argc, char *argv[]) {
int N;
scanf("%d",&N);
float A[N];
int i;
float sum = 0;
for (i = 0; i < N; i++) {
scanf ("%f",&A[i]);
}
for (i = 0; i < N; i++){
if (i%2==0) {
sum += A[i];
}
}
int i1, n2;
for (i = 0; i < N; i++) {
if (A[i]<0) {
i1=i;
break;
}
}
for (i = i1; i < N; i++) {
if (A[i]<0) {
n2=i;
}
}
float pr = 1;
for (i = i1; i <= n2; i++) {
pr=pr* A[i];
}
float B[N];
int k;
for (i = 0 , k =0; i < N; i++) {
if (fabs(A[i])>1){
B[k]=A[i];
k++;
}
}
printf("%.4f\n", sum);
printf("%.4f\n", pr);
for ( i = 0; i<N; i++)
printf("%.4f ", B[i]);
return 0;
}
С первыми двумя пунктами проблем вроде бы нет.Но проблема в последнем.Вот первый тест, почему то выводит -1...
Второй тест. Тут всё в порядке.
Третий тест..Почему то возвращает огромное значение, вместо 0.
При этом, если я оставляю только эту часть кода, то третий тест отрабатывает корректно
int main(int argc, char *argv[]) {
int N;
scanf("%d",&N);
float A[N];
int i;
float sum = 0;
for (i = 0; i < N; i++) {
scanf ("%f",&A[i]);
}
float B[N];
int k;
for (i = 0 , k =0; i < N; i++) {
if (fabs(A[i])>1){
B[k]=A[i];
k++;
}
}
for ( i = 0; i<N; i++)
printf("%.4f ", B[i]);
return 0;
}
Пожалуйста, помогите разобраться, в чем дело.
Ответы (1 шт):
Автор решения: Alexey Vesker
→ Ссылка
В первых двух примерах у вас есть отрицательные элементы массива, в последнем - нет. Соответственно переменные int i1, n2; не инициализированы. При последующих попытках их использования (в циклах удаления элементов) и происходит ошибка. Исправьте на
int i1 = 0, n2 = 0;
Все будет работать.



