Wątek przeniesiony 2022-12-28 18:32 z PHP przez kq.

Zadanie ze SPOJ - Obżartuchy

0

Zrobiłem zadanie ze SPOJA - obżartuchy, ale jest uznawane za błędne. Ktoś wie dlaczego?

#include <stdio.h>

int main()
{
    int a, x, y;
    printf("Podaj liczbe zestawow:\n");
    scanf("%d", &a);
    int tab2[a];
    
    for(int i = 0; i<a; i++)
    {
        printf("Podaj liczbe obazrtuchow i liczbe ciastek w pudelku\n");
        scanf("%d %d", &x, &y);
        int tab[x];
        for(int j =0; j<x; j++)
        {
            printf("Podaj czas jedzenia ciastka:\n");
            scanf("%d", &tab[j]);
        }
        int licznik = 0;
        for(int j = 0; j<x; j++)
        {
            licznik = licznik + 86400/tab[j];
        }
        
        if(licznik % y == 0)
        {
            tab2[i] = licznik/y;
        }
        else 
        {
            tab2[i] = licznik/y + 1;
        }
        
    }
    
    for(int i = 0; i < a; i++)
    {
        printf("%d\n", tab2[i]);
    }

    return 0;
}

3

Zakładam, że chodzi o to zadanie: https://pl.spoj.com/problems/GLUTTON/

Powiedz mi, jak się ma Twój kod do treści zadania:

Specyfikacja wyjścia

Dla każdego zestawu danych pojawiającego się na wejściu należy wypisać dokładnie jedną liczbę całkowitą (każdą w osobnej linii), oznaczającą liczbę pudełek z ciastkami, jaką organizatorzy muszą kupić na Zlot.

przede wszystkim, na podstawie czego wypisujesz

printf("Podaj liczbe zestawow:\n");
printf("Podaj liczbe obazrtuchow i liczbe ciastek w pudelku\n");
printf("Podaj czas jedzenia ciastka:\n");
3

Żeby wyjaśnić co ma na myśli Kq.
Twój program komunikuje się z robotem/automatem (innym programem), a nie z człowiekiem.
Ergo możesz mu wysyłać jedyne takie dane, które rozumie automatyczny sędzia na SPOJ. Taki automat nigdy nie zrozumie języka naturalnego (nikt rozsądny nie będzie używał AI do tego celu) i będzie przyjmował odpowiedzi jedynie zgodne ze specyfikacją danych wyjściowych opisanych w zadaniu.

0

Więc mam z góry ustalić liczbę zestawów, obzarciuchow i ich czas jedzenia? czy nie wstawiać tych pytań, tylko pobrać dane z klawiatury bez komentarza? Nie rozumiem skąd wziąć te dane

4

Pobierać te dane jak z klawiatury, ale bez żadnych dodatkowych pytań. Generalnie sprawdzanie polega na tym że jeden plik "udaje" klawiaturę, a drugi monitor. Jeśli zawartość drugiego zgadza się z wzorcem, test jest zaliczony. Tak więc nie wypisuj niczego co nie jest wymagane, bo zostanie to uznane za błędną odpowiedź. Nie ma też potrzeby zapisywania odpowiedzi do tablicy, możesz je wypisywać od razu.

3

Tak, dane pobrać bez wypisywania komentarza. Masz wypisać tylko to i dokładnie to, co każe Ci wypisać zadanie — patrz sekcja „Specyfikacja wyjścia” w zadaniu. Wypisanie czegokolwiek więcej, lub czegokolwiek mniej, będzie błędem.

2

Zresztą sam możesz zrobić jak spoj, . uruchamiając program dopisz po nazwa.exe < [tu nazwa pliku z wejściem (to wpisujesz z klawiatury)], wtedy masz pewność że niczego nie pomylisz, a także jeśli chcesz > [nazwa pliku gdzie ma trafić to co jest wypisywane na ekranie], do późniejszego porównania z wzorcem. Tylko pamiętaj że jak przekierujesz wyjście do pliku, nic się nie pokaże na ekranie, konsola wróci do wiersza poleceń.

0

Tak jak mówi @sig
Napisz sobie .bat (jeżeli działasz pod linuksem to stwórz odpowiedni .sh)

@echo off
setlocal EnableDelayedExpansion
for %%i in (testinp*.txt) do (
	set finp=%%i
	set fout=!finp:inp=out!
	program <!finp! >tmp.txt
	FC !fout! tmp.txt >cmp.txt
	if !errorlevel!==0 (echo !finp! "ok") else (echo !finp! && type cmp.txt)
)

Piszesz sobie kilka testów:
testinp1.txt => testout1.txt jeden przykład zawsze podany
testinp2.txt => testout2.txt
i odpalasz powyższego .bat'a

1 użytkowników online, w tym zalogowanych: 0, gości: 1