Где почитать

Что на этом работает

Тэги

mssql mysql asterisk windows

Партнеры и друзья


Условие задачи

В файле task.in заданы числа len1 и len2, а затем два отсортированных по неубыванию массива длинами len1 и len2.
Произвести слияние этих массивов в третий, также отсортированный по неубыванию.
Алгоритм должен работать за линейное время.
Результат вывести в task.out

#include <stdio.hgt;

int getLen(FILE *in) {
    int size;
    
    fscanf(in, "%d", &size);
    return size;
}

void arrayFill(FILE *in, int array[], int limit) {
    for ( int i = 0; i < limit && fscanf(in, "%d", &array[i]) > 0; i++ );
}

void arrayPrint(FILE *out, int array[], int size) {
    size = size - 1;
    for ( int i = 0; i < size; i++ ) {
        fprintf(out, "%d ", array[i]);
    }
    fprintf(out, "%d\n", array[size]);
}

void arraySort(int array[], int size) {
    int temp = 0;
    int nextIndex;
    
    size = size - 1;
    
    for ( int i = 0; i < size; i++ ) {
        for ( int j = 0; j < size; j++ ) {
            if ( array[j] >= array[j+1] ) {
                temp = array[j];
                nextIndex = j + 1;
                array[j] = array[nextIndex];
                array[nextIndex] = temp;
            }
        }
    }
}

int main() {
    FILE *in = fopen("task.in", "r");
    FILE *out = fopen("task.out", "w");
    int len1 = getLen(in);
    int len2 = getLen(in);
    int size = len1 + len2;
    int array1[len1], array2[len2], dst[size];
    int indexPosition;
    
    arrayFill(in, array1, len1);
    arrayFill(in, array2, len2);
    fclose(in);
    
    for ( int i = 0; i < len1; i++ ) {
        dst[i] = array1[i];
    }
    for ( int i = 0; i < len2; i++ ) {
        indexPosition = len1 + i;
        dst[indexPosition] = array2[i];
    }
    
    arraySort(dst, size);
    arrayPrint(out, dst, size);
    fclose(out);
    
    return 0;
}

Опубликовано 2011-08-21 18:25:00


Находится в поиске с названиями
Ссылки о "Merge / C / Объединить 2 массива и отсортировать" на других сайтах

    Условие задачи
    В файле task.in задан массив размером не более 100 элементов.
    Прочитать массив и удалить из него дубликаты элементов.
    Результирующий массив записать в task.out.

    #include <stdio.h>
    
    #define SIZE 100
    
    int arrayScan(FILE *in, int array[], int len) {
        int i;
        
        for ( i = 0; i < len && fscanf(in, "%d", &array[i]) > 0; i++ );
        
        return i;
    }
    
    void arrayPrint(FILE *out, int array[], int len) {
        len = len - 1;
        for ( int i = 0; i < len; i++ ) {
            fprintf(out, "%d ", array[i]);
        }
        fprintf(out, "%d\n", array[len]);
    }
    
    int arraySearch(int array[], int needle, int len) {
        for ( int i = 0; i < len; i++ ) {
            if ( array[i] == needle ) {
                return i;
            }
        }
        return -1;
    }
    
    int arrayUnique(int array[], int len) {
        int index, needle;
        
        index = 0;
        for ( int i = 0; i < len; i++ ) {
            needle = array[i];
            
            if ( arraySearch(array, array[i], i) == -1 ) {
                array[index] = needle;
                index += 1;
            }
        }
        
        return index;
    }
    
    int main() {
        FILE *in = fopen("task.in", "r");
        FILE *out = fopen("task.out", "w");
        int array[SIZE];
        int len = arrayScan(in, array, SIZE);
        
        fclose(in);
        
        arrayPrint(out, array, arrayUnique(array, len));
        fclose(out);
        
        return 0;
    }
    

    Опубликовано 2011-08-18 15:00:00


    Находится в поиске с названиями
    Ссылки о "Прочитать массив, удалить дубликаты, записать в файл" на других сайтах

      Условие задачи

      Считать с клавиатуры целое неотрицательное число-максимум.
      Считать с клавиатуры целый, не равный нулю делитель.
      Вывести в строку числа от нуля до указанного максимума включительно, кратные заданному делителю.

      #include <stdio.h>
      
      int main() {
          int a = 0;
          int b = 0;
          
          scanf("%d %d", &a, &b);
          
          if ( b == 0 || a < 0 ) {
              printf("\n");
              return 0;
          }
          
          if ( b < 0 ) {
              b = -b;
          }
          
          a -= a % b;
          
          for ( int i = 0; i < a; i += b ) {
              printf("%d ", i);
          }
          
          printf("%d\n", a);
          
          return 0;
      }
      
      

      Опубликовано 2011-08-14 22:14:00


      Находится в поиске с названиями
      Ссылки о "Задача - вывести числа от нуля до указанного максимума включительно, кратные заданному делителю" на других сайтах

        Условие задачи

        Написать функцию, возвращающую индекс искомого числа в массиве либо -1 в случае, если число в массиве не содержится.
        int arraySearch(int array[], int size, int needle)

        int arraySearch(int array[], int size, int needle) {
            for ( int i = 0; i < size; i++ ) {
                if ( array[i] == needle ) {
                    return i;
                }
            }
            
            return -1;
        }
        
        

        Опубликовано 2011-08-14 22:10:00


        Находится в поиске с названиями
        Ссылки о "Функция нахождения элемента массива" на других сайтах

          Условие задачи

          В файле task.in дано число len и массив размером len элементов.
          Отсортировать элементы в порядке неубывания.
          Настоятельно рекомендуется разработать алгоритм самостоятельно, без помощи гугла. Результат вывести в task.out.

          
          #include <stdio.h>
          
          int getSize(FILE *in) {
              int len;
              
              fscanf(in, "%d\n", &len);
              
              return len;
          }
          
          void arrayFill(FILE *in, int array[], int limit) {
              for ( int i = 0; i < limit && fscanf(in, "%d", &array[i]) > 0; i++ );
          }
          
          void arraySort(int array[], int size) {
              int min;
              
              for ( int i = 0; i < size - 1; i++ ) {
                  for ( int j = i; j < size; j++ ) {
                      if ( array[j] < array[i] ) {
                          min = array[j];
                          array[j] = array[i];
                          array[i] = min;
                      }
                  }
              }
          }
          
          void arrayPrint(FILE *out, int array[], int size) {
              size = size - 1;
              
              for ( int i = 0; i < size; i++ ) {
                  fprintf(out, "%d ", array[i]);
              }
              fprintf(out, "%d\n", array[size]);
          }
          
          int main() {
              FILE *in = fopen("task.in", "r");
              FILE *out = fopen("task.out", "w");
              int size = getSize(in);
              int array[size];
              
              arrayFill(in, array, size);
              fclose(in);
              
              arraySort(array, size);
              arrayPrint(out, array, size);
              fclose(out);
              
              return 0;
          }
          
          

          Опубликовано 2011-08-14 22:08:00


          Находится в поиске с названиями
          Ссылки о "Задача по сортировке массива" на других сайтах

            Условие задачи

            В файле task.in даны два целых положительных числа.
            Записать в файл task.out наименьшее общее кратное этих чисел.

            #include <stdio.h>
            
            unsigned long long gcd(unsigned long long a, unsigned long long b) {
                unsigned long long result;
                
                if ( b == 0 ) {
                    return a;
                }
                result = a % b;
                
                return gcd(b, result);
            }
            
            unsigned long long lcm(unsigned long long x, unsigned long long y) {
                return x * y / gcd(x, y);
            }
            
            int main() {
                FILE *in = fopen("task.in", "r");
                FILE *out = fopen("task.out", "w");
                unsigned long long x, y;
                
                fscanf(in, "%llu %llu", &x, &y);
                fclose(in);
                
                fprintf(out, "%llu\n", lcm(x, y));
                fclose(out);
                
            }
            
            

            Опубликовано 2011-08-14 22:00:00


            Находится в поиске с названиями
            Ссылки о "Задача на нахождение общего кратного двух чисел" на других сайтах