Написать программу используя массивы - C (СИ)
Формулировка задачи:
Дед Мороз и Снегурочка приходят на детские утренники с мешком конфет. Дед Мороз делит конфеты поровну между всеми присутствующими детьми (детей на утреннике никогда не бывает больше 100), а оставшиеся конфеты отдает Снегурочке. Снегурочка каждый раз записывает в блокнот количество полученных конфет. Если конфеты разделились между всеми детьми без остатка, Снегурочка ничего не получает и ничего не записывает. Когда утренники закончились, Деду Морозу стало интересно, какое число чаще всего записывала Снегурочка. Дед Мороз и Снегурочка – волшебные, поэтому число утренников N, на которых они побывали, может быть очень большим.
Напишите программу, которая будет решать эту задачу. Перед текстом программы кратко опишите алгоритм решения задачи и укажите используемый язык программирования и его версию.
Желательно, чтобы программа была эффективной как по времени работы, так и по используемой памяти. Программу будем считать эффективной по памяти, если используемая память не зависит от размера входных данных (то есть числа утренников). Программу будем считать эффективной по
времени, если при увеличении размера входных данных N в t раз (t – любое число) время её работы увеличивается не более чем в t раз.
Описание входных данных
В первой строке вводится одно целое положительное число – количество утренников N.
Каждая из следующих N строк содержит два целых числа: сначала D – количество пришедших на очередной утренник детей, а затем K – количество конфет в мешке Деда Мороза на этом утреннике. Гарантируется выполнение следующих соотношений:
1 ≤ N ≤ 10000
1 ≤ D ≤ 100 (для каждого D)
D ≤ K ≤ 1000 (для каждой пары D, K)
Описание выходных данных
Программа должна вывести одно число – то, которое Снегурочка записывала чаще всего. Если несколько чисел записывались одинаково часто, надо вывести большее из них. Если Снегурочка ни разу ничего не записывала, надо вывести ноль.
Пример входных данных:
7
10 58
15 315
20 408
100 1000
32 63
32 63
11 121
Пример выходных данных для приведённого выше примера входных данных:
31.
Помогите пожалуйста а то сессия на носу
Решение задачи: «Написать программу используя массивы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> void main() { setlocale(LC_ALL,"rus"); int n,i,j,max=0,cnt=0,x; srand(time(NULL)); printf("Введите количесвто утренников:\n"); scanf("%d",&n); while(n>10000||n<1) { printf("Невверный ввод. Введите кол-во утренников от 1 до 10000:\n"); scanf("%d",&n); } int ar[n][2],ar2[n]; //создаем 2 массива - для детей и конфет, для записей снегурочки for(i=0;i<n;i++) //если заполнять рандомом-вариант 1 { ar[i][0]=1+rand()%101; ar[i][1]=1+rand()%1001; printf("%d %d\n",ar[i][0],ar[i][1]); } /*for(i=0;i<n;i++) //если заполнять вручную-вариант 2 { scanf("%d",&ar[i][0]); scanf("%d",&ar[i][1]); }*/ printf("\n"); for(i=0;i<n;i++) //заполняем блокнот Снегурочки { ar2[i]=ar[i][1]%ar[i][0]; printf("%d\n",ar2[i]); } for(i=0;i<n;i++) //ищем повторяющиеся числа(не оптимизировано) { for(j=0;j<n;j++) { if(ar2[i]==ar2[j]) cnt++; } if(cnt>max) { max=cnt; x=i; } cnt=0; } if(cnt==0) //если нет повторяющихся элементов, выводим максимальный { int a_max=0; for(i=0;i<n;i++) { if(ar2[i]>a_max) a_max=ar2[i]; } printf("\n%d",a_max); } else printf("\n%d",ar2[x]); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с языком C.
- Установка русской локали для корректного вывода русских символов.
- Объявление переменных: n (количество утренников), i, j, max (количество повторяющихся элементов), cnt (счетчик повторяющихся элементов), x (индекс с максимальным количеством повторений), ar (массив для хранения данных об утренниках), ar2 (массив для хранения данных, которые будут использоваться снегурочкой).
- Ввод количества утренников с помощью функции scanf.
- Блокировка возможности ввода некорректного количества утренников с помощью цикла while.
- Создание двух массивов: ar и ar2.
- Заполнение массива ar случайными значениями с помощью цикла for и функции rand.
- Заполнение массива ar2 с помощью цикла for и функции scanf (вариант 2).
- Вывод информации из массива ar2 с помощью цикла for и функции printf.
- Поиск повторяющихся чисел в массиве ar2 с помощью двух вложенных циклов for и операторов if.
- Обновление значения переменной max при обнаружении нового максимального значения.
- Обновление значения переменной x при обнаружении нового максимального значения.
- Вывод информации о максимальном значении (вариант 1) или о найденном повторяющемся значении (вариант 2) с помощью функции printf.
- Конец программы и возврат значения 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д