Задача на последовательностив массиве - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дан целочисленный массив из 30 элементов. Опишите алгоритм, который находит и выводит сумму наибольшей по длине возрастающей последовательности подряд идущих элементов. Если таких последовательностей несколько, можно вывести любую из них.
#include <stdio.h>
 
main(){
int dig[10];
int i,sum,dlina,dlinamax,maxsum;
 
for (i = 0 ; i <= 4 ;i++){
   scanf("%d",&dig[i]);
}
 
for ( i = 0 ; i <= 9 ; i++){
   dlina = 1;
   sum = dig[i];
   if (dig[i] < dig[i + 1]){
      sum += dig[i + 1];
      dlina++;
   }
   if (dlina > dlinamax){
      dlinamax = dlina;
      maxsum = sum;
   }
}
printf("Сумма самой длинной возрастающей последовательности: %d\n",maxsum);
}
Помогите найти ошибку.Выводит огромадное число.Заранее благодарен.
#include <stdio.h>
 
main(){
int dig[10];
int i,sum,dlina,dlinamax,maxsum;
 
for (i = 0 ; i <= 9 ;i++){
   scanf("%d",&dig[i]);
}
maxsum = 0;
dlinamax = 0;
for ( i = 0 ; i <= 9 ; i++){
   dlina = 1;
   sum = dig[i];
   if (dig[i] > dig[i - 1]){
      sum += dig[i];
      dlina++;
   }
   if (dlina > dlinamax){
      dlinamax = dlina;
      maxsum = sum;
   }
}
printf("Сумма самой длинной возрастающей последовательности: %d\n",maxsum);
}
Теперь выводит 4

Решение задачи: «Задача на последовательностив массиве»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
#define NUMBER_OF_ELEMENTS 30
 
int main(void) {
    int array[NUMBER_OF_ELEMENTS], maxSentenceStartIndex, maxSentenceLength, currentSentenceStartIndex, currentSentenceLength, i, sum;
    
    srand(time(NULL));
    for ( i = 0; i < NUMBER_OF_ELEMENTS; ++i )
        array[i] = rand() % 10;
        
    maxSentenceStartIndex = currentSentenceStartIndex = 0;
    maxSentenceLength = currentSentenceLength = 1;
    
    while ( currentSentenceStartIndex < NUMBER_OF_ELEMENTS ) {
        for ( i = currentSentenceStartIndex + 1; i < NUMBER_OF_ELEMENTS && array[i] > array[i-1]; ++i )
            ++currentSentenceLength;
            
        if ( maxSentenceLength < currentSentenceLength ) {
            maxSentenceStartIndex = currentSentenceStartIndex;
            maxSentenceLength = currentSentenceLength;
        }
        
        currentSentenceStartIndex = i;
        currentSentenceLength = 1;
    }
    
    for ( sum = array[maxSentenceStartIndex], i = maxSentenceStartIndex + 1; i - maxSentenceStartIndex < maxSentenceLength; ++i )
        sum += array[i];
    
    printf("Array:\n");
    for ( i = 0; i < NUMBER_OF_ELEMENTS; ++i )
        printf("%d ", array[i]);
    
    printf("\nThe first maximum length sentence of progressive elements starts at index:\n%d (value of %d, length of %d elements)\n", maxSentenceStartIndex, array[maxSentenceStartIndex], maxSentenceLength);
    
    printf("Sum of this sentence:\n%d\n", sum);
    
    return 0;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Определяем количество элементов в массиве
  3. Инициализируем переменные для хранения индексов и длин последовательностей
  4. Инициализируем генератор случайных чисел
  5. Заполняем массив случайными числами
  6. Находим индекс и длину максимальной последовательности
  7. Находим сумму максимальной последовательности
  8. Выводим массив на экран
  9. Выводим информацию о первой максимальной последовательности
  10. Выводим сумму максимальной последовательности

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.3 из 5
Похожие ответы