• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Помогите найти ошибку в программе на Си

  • Автор темы Автор темы Gerold
  • Дата начала Дата начала

Gerold

Ученик
Регистрация
3 Окт 2012
Сообщения
1
Реакции
0
Баллы
0
Помогите найти ошибку в программе на Си

На стандартном потоке ввода задается натуральное число N (N > 0), после которого следует последовательность из N целых чисел.

На стандартный поток вывода напечатайте длину максимальной (по длине) возрастающей непрерывной подпоследовательности входной последовательности.

Указание: использовать массивы запрещается.

Программа у меня неверно при большом N работает.Помогите ошибку найти.

Код:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    long long a,b,max,i,s;
    unsigned long n;
    max=1;
    s=1;
    scanf("%lu",&n);
    if ((n==0)||(n==1))
    {
        printf("%lu",n);
        return 0;
    }
    scanf("%lld",&a);
    if (n>2)
    {
        for (i=2;i<=n;i++)
        {
            b=a;
            scanf("%lld",&a);
            if (b<a)
            s++;
            else if (s>=max)
            {
                max=s;
                s=1;
            }
        }
        if (s>max) max=s;
        printf("%lld",max);
    }
    if (n==2)
    {
        b=a;
        scanf("%lld",&a);
        if (a>b)
        printf("2");
        else
        printf("1");
    }
    return 0;
}
 
Вот так (компилировал в Dev-C++):
Код:
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 int a,
     b;
 int n=0,
     max=1,
     s=1;
 int i;
 
 printf("\nEnter quantiy of numbers: ");
 scanf("%d",&n);
 switch (n)
 {
  case 0: 
  {
   printf("\nMax series: 0\n");
   break;
  }
  case 1: 
  { 
   printf("\nEnter numbers:\n");
   scanf("%d",&a);
   printf("\nMax lenght: 1\n");
   break;
  }
  
  default :
  {
   printf("\nEnter numbers:\n");
   scanf("%d",&a);
   for (i=2;i<=n;i++)
   {
    scanf("%d",&b);
    if(a<=b) s++;
    else s=1;
    if(s>max) max=s;    
   a=b;
   }
   printf("Max series: %d\n",max); 
   break;
  }
 } 
  return 0;
}

На будущее - не ленитесь писать комментарии к выводу. Также, не вижу смысл объявлять переменные long long и unsigned long, здесь Вам достаточно и int.
 
Назад
Сверху