Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 12:13   #1
xEk
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 19
Вопрос Как улучшить код?!

Написал код к заданию: Дан целочисленный массив размера N. Если он является перестановкой, то есть содержит все числа от 1 до N, то вывести 0, в противном случае вывести номер первого недопустимого элемента.
Код:
#include <stdio.h>
#include <stdlib.h>
int main (void)
{
    int n=10,i,y,k=0,z=0;
    int a[n];
    srand(8);
    for(i=0;i<n;i++)
      a[i]=rand()%10;
       printf("\n\nARRAY A\n\n");
       for(i=0;i<n;i++)
      printf("%8i",a[i]);

    for(i=0;i<n;i++)
     {
         if((a[i]>=1)&&(a[i]<=n))
           y=1;
         else
         {
          y=0;
           if(k==0)
            z=i;
            k=1;
         }
     }

     if (y==1)
      printf("\n\n0\n\n");
     else
     {
       printf("\nNe tot element ");
         printf("%i",z);
     }

     return 0;
}
Если есть ошибки или как то можно улучшить ее подскажите пожалуйста. Прога рабочая.
xEk вне форума Ответить с цитированием
Старый 08.05.2012, 12:19   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

А почему srand(8)?
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 08.05.2012, 12:29   #3
xEk
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 19
По умолчанию

А что должно быть? От него же тут ничего не зависит...
xEk вне форума Ответить с цитированием
Старый 08.05.2012, 12:33   #4
AlexDark
Форумчанин
 
Аватар для AlexDark
 
Регистрация: 23.12.2011
Сообщений: 117
По умолчанию

Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void)
{
    int n=10,i,y,k=0,z=0;
    int a[n];
    srand(time(0)); //как бы случайность должна быть))
    for(i=0;i<n;i++)
      a[i]=rand()%10;
       printf("\n\nARRAY A\n\n");
       for(i=0;i<n;i++)
      printf("%8i",a[i]);

    for(i=0;i<n;i++)
     {
         if((a[i]>=1)&&(a[i]<=n))
         {
             printf("\nNe tot element ");
             printf("%i",a[i]);
             return 0;
         }
     }
     printf("Perestanovka");
     return 0;
}
Вот так обрезать можно впринципе

Последний раз редактировалось AlexDark; 08.05.2012 в 12:35.
AlexDark вне форума Ответить с цитированием
Старый 08.05.2012, 12:59   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
От него же тут ничего не зависит...
От него rand зависит...
p51x вне форума Ответить с цитированием
Старый 08.05.2012, 14:20   #6
xEk
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 19
По умолчанию

А как записать количество элементов с таким же значением?
Вот написал код по нахождению максимального отклонения в меньшую сторону, а количество этих отклонений не знаю как...
Код:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (void)
{
    int n=20,i,j,f=0,max;
    printf("Enter razmer detali = ");
    scanf ("%i", &j);
    int a[n];
    srand(time(0));
    for(i=0;i<n;i++)
      a[i]=rand()%21+80;
       printf("\n\nARRAY A\n\n");
       for(i=0;i<n;i++)
        printf("%5i",a[i]);
    for(i=0;i<n;i++)
     if(a[i]<j)
     {
         if(f==0)
          {
              max=a[i];
              f=1;
          }
         if(a[i]<max)
          max=a[i];
     }
printf("\n\nMaximalnoe otklonenie = %i", max);


return 0;
}
xEk вне форума Ответить с цитированием
Старый 08.05.2012, 18:08   #7
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Вообще-то перестановка подразумевает, что каждое число входит ровно один раз.
Решать IMHO можно минимум двумя способами:
1. Сортировка. Недостаток - сложность O(n*log(n)). Достоинство - дополнительная память O(1).
2. Дополнительный массив, в котором подсчитываем количество повторений каждого числа. Достоинство - сложность O(n). Недостаток - дополнительная память O(n).
s-andriano вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как можно улучшить код для синтаксической подсветки? (Delphi 7)) munthrekosh Общие вопросы Delphi 5 24.03.2012 08:29
Как можно улучшить код @ndreiKO Помощь студентам 5 23.08.2011 04:21
Как улучшить код kirza Общие вопросы Delphi 10 19.01.2011 18:14
Вопрос по символьным массивам. Как улучшить код. Aerial Общие вопросы C/C++ 4 13.04.2010 10:54
Как улучшить макрос? Highlander Microsoft Office Excel 1 23.01.2010 12:15