#c
#c
Вопрос:
Я пытаюсь решить эту проблему в HackerRank, и как только я отправляю свое решение, компилятор показывает, wrong answer
и это показывает ~ no response on stdout ~
в окне вывода. Как мне это исправить?
Вопрос:
Учитывая 2D-массив размером 6X6, A,
1 1 1 0 0 0 0 1 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Мы определяем песочные часы в A как подмножество значений с индексами, попадающими в этот шаблон в графическом представлении A:
a b c d e f g
В A 16 песочных часов, и сумма песочных часов — это сумма значений песочных часов.
Задача
Вычислите сумму песочных часов для всех песочных часов в A, затем выведите максимальную сумму песочных часов.
Я уже пытался решить проблему. Я просто не могу избавиться от этого сообщения об ошибке. Логика и решение кажутся правильными.
#include <assert.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *readline();
char **split_string(char *);
void func(int arr[][100]) {
int hgs[4][4];
int i = 0, j = 0;
for (i = 0; i < 4; i ) {
for (j = 0; j < 4; j ) {
hgs[i][j] = arr[i][j] arr[i][j 1] arr[i][j 2]
arr[i 1][j 1]
arr[i 2][j] arr[i 2][j 1] arr[i 2][j 2];
}
}
int max = hgs[0][0];
for (i = 0; i < 4; i ) {
for (j = 0; j < 4; j ) {
if (hgs[i][j] > max)
max = hgs[i][j];
}
}
printf("%d", max);
}
int main() {
int **arr = malloc(6 * sizeof(int*));
for (int i = 0; i < 6; i ) {
*(arr i) = malloc(6 * (sizeof(int)));
char **arr_item_temp = split_string(readline());
for (int j = 0; j < 6; j ) {
char* arr_item_endptr;
char* arr_item_str = *(arr_item_temp j);
int arr_item = strtol(arr_item_str, amp;arr_item_endptr, 10);
if (arr_item_endptr == arr_item_str || *arr_item_endptr !=
'') {
exit(EXIT_FAILURE);
}
*(*(arr i) j) = arr_item;
}
}
func(**arr);
return 0;
}
char *readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
char* data = malloc(alloc_length);
while (true) {
char *cursor = data data_length;
char *line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) {
break;
}
data_length = strlen(cursor);
if (data_length < alloc_length - 1 || data[data_length - 1] ==
'n') {
break;
}
size_t new_length = alloc_length << 1;
data = realloc(data, new_length);
if (!data) {
break;
}
alloc_length = new_length;
}
if (data[data_length - 1] == 'n') {
data[data_length - 1] = '';
}
data = realloc(data, data_length);
return data;
}
char **split_string(char *str) {
char **splits = NULL;
char *token = strtok(str, " ");
int spaces = 0;
while (token) {
splits = realloc(splits, sizeof(char*) * spaces);
if (!splits) {
return splits;
}
splits[spaces - 1] = token;
token = strtok(NULL, " ");
}
return splits;
}
Ожидаемый результат 19
для образца ввода, но я не получаю никакого вывода.
Ответ №1:
Ваш код очень сложный для этой простой программы, но проблема может быть очень простой:
-
Прототип для
func
должен быть:void func(int **arr)
-
Вы должны завершить свой вывод новой строкой:
printf("%dn", max);
-
Вы должны передать массив
func
таким образом:func(arr);
Вот упрощенная версия func
кода:
void func(int **arr) {
int i, j, cur, max = INT_MIN;
for (i = 0; i < 4; i ) {
for (j = 0; j < 4; j ) {
cur = arr[i][j] arr[i][j 1] arr[i][j 2]
arr[i 1][j 1]
arr[i 2][j] arr[i 2][j 1] arr[i 2][j 2];
if (max < cur)
max = cur;
}
}
printf("%dn", max);
}
Вот значительно упрощенная версия всей программы:
#include <limits.h>
#include <stdio.h>
int main() {
int grid[6][6];
int i, j, cur, max = INT_MIN;
for (i = 0; i < 6; i ) {
for (j = 0; j < 6; j ) {
if (scanf("%d", amp;grid[i][j]) != 1)
return 1;
}
}
for (i = 0; i < 4; i ) {
for (j = 0; j < 4; j ) {
cur = arr[i][j] arr[i][j 1] arr[i][j 2]
arr[i 1][j 1]
arr[i 2][j] arr[i 2][j 1] arr[i 2][j 2];
if (max < cur)
max = cur;
}
}
printf("%dn", max);
return 0;
}
Комментарии:
1. Нет. На самом деле, я только ввел функцию func. В дополнение к этому мне пришлось написать оператор вызова функции в функции main. Остальной код уже был там. Я не могу удалить эти части кода.
2. @AdityaG901: такой плохой пример чрезмерно сложного кода для простой задачи. Тогда просто исправьте код для функции
func
и ее вызова в соответствии с моими замечаниями.3. Я попытался реализовать оба упомянутых вами изменения, включая инициализацию max с помощью INT_MIN. На выходе получается 1104762770
4. Он просто выдает нежелательное значение каждый раз, когда я его запускаю
5. @AdityaG901: Вы изменили прототип и синтаксис вызова? Вы компилируете в своей собственной системе с включенными предупреждениями или только на сайте challenge? Каким вы видите результат?