Условие задачи
В файле 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
Находится в поиске с названиями
Условие задачи
В файле 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
Находится в поиске с названиями