Я только что выполнил вызов в Dcoder, используя C. Я получил один правильный тестовый пример из трех, и я не могу найти проблему, которая мешает мне правильно понять и другие два тестовых случая. Я все еще новичок в C, поэтому извините, если мой код может показаться неопытным. Любая помощь приветствуется.
Вот задание:
Постановка задачи
Учащиеся школы Dcoder любят математику. Они любят читать различные книги по математике. Чтобы они оставались счастливыми, их учитель математики решил получить больше книг для них. Ученик станет счастливым, если в классе будет хотя бы X книг по математике и не более Y книг, потому что они знают: «Вся работа, а не игра делает Джека скучным мальчиком». Учитель хочет купить минимальное количество книг, чтобы сделать максимальное количество счастливых учеников.
Ввод
В первой строке ввода содержится целое число N, указывающее количество учеников в классе. Далее следуют N строк, где каждая строка содержит два целых числа X и Y соответственно.
Выход
Выведите два целых числа через пробел, которые обозначают минимальное количество требуемых книг по математике и максимальное количество счастливых учеников , Объяснение: Учитель мог купить 5 книг и сделать ученика 1, 2, 4 и 5 счастливыми.
Ограничения
1 <= N <= 10000 1 <= X, Y <= 10 ^ 9 </p>
Пример ввода
5
3 6
1 6
7 11
2 15
5 8
Пример вывода
5 4
А вот мой код:
#include <stdio.h>
//Compiler version gcc 6.3.0
typedef struct{
int minBooks;
int maxBooks;
} Student;
typedef struct{
int books;
int happyStudents;
} Happiness;
void fillarray(Student *arr, int len){
for(int i = 0; i < len; i++){
scanf(" %d", &arr[i].minBooks);
scanf(" %d", &arr[i].maxBooks);
}
}
int getmaximum(Student *arr, int len){
int max = 0;
for(int i = 0; i < len; i++)
if(arr[i].maxBooks > max)
max = arr[i].maxBooks;
return max;
}
Happiness *calchappiness(Student *arr, int len, int max){
Happiness *re = malloc(max * sizeof(Happiness));
for(int i = 1; i <= max; i++){
re[i - 1].books = i;
for(int j = 0; j < len; j++){
if(i >= arr[j].minBooks && i <= arr[j].maxBooks)
re[i - 1].happyStudents++;
}
}
return re;
}
Happiness getmaxhappiness(Happiness *arr, int len){
Happiness re;
re.happyStudents = 0;
for(int i = 0; i < len; i++)
if(arr[i].happyStudents > re.happyStudents)
re = arr[i];
return re;
}
Happiness getminbooks(Happiness *arr, int len){
Happiness re;
re.books = 1000;
for(int i = 0; i < len; i++)
if(arr[i].books < re.books)
re = arr[i];
return re;
}
Happiness besthappiness(Happiness *arr, int len){
Happiness re = getminbooks(arr, len);
for(int i = 0; i < len; i++){
if(arr[i].happyStudents > re.happyStudents)
re = arr[i];
}
return re;
}
int main()
{
int len;
scanf(" %d", &len);
Student *students = malloc(len * sizeof(Student));
fillarray(students, len);
int happylen = getmaximum(students, len);
Happiness *happy = calchappiness(students, len, happylen);
Happiness output = besthappiness(happy, happylen);
printf("%d %d", output.books, output.happyStudents);
free(students);
free(happy);
return 0;
}