• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z reszta podołasz?

Object Storage Arubacloud
+1 głos
301 wizyt
pytanie zadane 13 maja 2015 w C i C++ przez Wiktor Kiślak Użytkownik (610 p.)
edycja 13 maja 2015 przez Wiktor Kiślak
Od pewnego czasu podejmuje się różnorakich zadań zwiazanych z programowaniem aby rozwinąć swoje umiejętności trafiłem na zadanko które wymaga trochę główkowania :)

Dziś trochę nad nim posiedziałem lecz nic z tego nie wyszło jutro oczywiście podejmę się go jeszcze raz a mimo co zostawiam was z nim.(Jeżeli komuś się nudzi w nocy :P)

Kodami pochwalcie się w komentarzach :)

http://zapodaj.net/dc304d26873e5.png.html

4 odpowiedzi

0 głosów
odpowiedź 13 maja 2015 przez iwan9449 Pasjonat (20,810 p.)
#include <iostream>

using namespace std;

int main()
{
    int n,a,b,x,w;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>a>>b;
        x=b-a;
        w=0;
        if(x>=5){
            w=x/5;
            x%=5;
        }
        if(x>=4){
            w+=x/4;
            x%=4;
        }
        if(x>=1){
            w+=x/1;
            x%=1;
        }
        cout<<w<<endl;
    }

    return 0;
}

 

komentarz 14 maja 2015 przez Fulaphex Początkujący (470 p.)
edycja 14 maja 2015 przez Fulaphex
Zachlan tu nie dziala, 8 Twoj program wyda monetami 5 1 1 1 a powinien 4 i 4. Oprocz tego a i b powinny byc przechowywane w long longach, wiec w i x pewnie tez powinny byc long longami :)
komentarz 14 maja 2015 przez iwan9449 Pasjonat (20,810 p.)
Fakt, powiem szczerze, że program wykonałem na szybko i nie pokusiłem się o sprawdzenie jego poprawności dla innych testów ;) Dzięki za zwrócenie uwagi, poprawię ;)
0 głosów
odpowiedź 14 maja 2015 przez criss Mędrzec (172,590 p.)
Tak na szybko, juz mi sie nie chce tego kodowac.

obliczamy reszte: czyli reszta=kwota_jasia - cena_roweru

liczba_monet=0;

oczywiscie minimalna ilosc monet bedzie przy monetach 5-zlotowych, wiec liczymy ile jestesmy w stanie wyplacic w 5zl:

liczba_monet += (reszta-(reszta%5) )/5;

reszta = reszta%5; //pozostala reszta do wydania

Teraz to samo robimy dla monet 2-zlotowych:

liczba_monet += (reszta-(reszta%2) )/2;

reszta = reszta%2;

liczba_monet += reszta; //bo zostaly monety 1-zlotowe, wiec mnozymy razy jeden pozostala reszte (czyli nie zmieniamy nic : D )

Jutro jeszcze zobacze czy dobrze mysle...
komentarz 14 maja 2015 przez Fulaphex Początkujący (470 p.)
Twoje rozwiazanie jest zle o tyle, ze zakladasz nominaly 1, 2, 5, dla ktorych strategia zachlanna dziala. Dla liczb 1,4,5 strategia zachlanna nie dziala. Jesli chcemy wydac 8 zlotych, to zachlannie wydamy 5 1 1 1 a optymalnie jest 4 i 4.
komentarz 14 maja 2015 przez criss Mędrzec (172,590 p.)
Faktycznie, pomyliłem 2 z 4. No w takim wypadku wszystko leży :c
0 głosów
odpowiedź 14 maja 2015 przez Fulaphex Początkujący (470 p.)
#include <cstdio>
using namespace std;
int main(){
	int tab[10000];//, pop[10000];
	for(int i = 1; i < 10000; i++){
		// pop[i] = -1;
		tab[i] = 100000;
	}
	tab[0] = 0;
	// pop[0] = 0;
	for(int i = 0; i < 200; i++){
		if(tab[i+1] > tab[i]+1){
			tab[i+1] = tab[i] + 1;
			// pop[i+1] = 1;
		}
		if(tab[i+4] > tab[i]+1){
			tab[i+4] = tab[i] + 1;
			// pop[i+4] = 4;
		}
		if(tab[i+5] > tab[i]+1){
			tab[i+5] = tab[i] + 1;
			// pop[i+5] = 5;
		}
	}
	
	// for(int j = 0; j < 20; j++){
	// 	for(int i = 0; i < 200; i+= 20){
	// 		printf("tab[%d] = %d\n", i+j, tab[i+j]);
	// 	}
	// }
	int T;
	scanf("%d", &T);
	while(T--){
		long long a, b;
		scanf("%lld%lld", &a, &b);
		a = b - a;
		if(a <= 20) printf("%d\n", tab[a]);
		else{
			printf("%lld\n", (a/20 - 1)*4 + tab[a%40]);
		}
	}
	return 0;
}

To jest jakas tam moja bzdura, ktora sklecilem przed spaniem. Przykladowe z tresci przechodzi, wiecej zbytnio nie testowalem, ale wydawalo mi sie to nie byc totalnie zle. Napisane strasznie niechlujnie, ale to idzie poprawic :)

komentarz 14 maja 2015 przez Wiktor Kiślak Użytkownik (610 p.)
edycja 14 maja 2015 przez Wiktor Kiślak
Błędne :) Działa dla podstawowych lecz na 100 różnych juz nie :)

Na wejsciu musze być wszystkie liczby a potem dopiero wyjscie

czyli

3

100 99 (wprowadzamy wszystkie?

a potem pokazuje się wynik dopiero wszystkich 3.
komentarz 14 maja 2015 przez Xeon Użytkownik (800 p.)
Nigdzie nie ma napisanego, że najpierw wejścia wszystkie podać, a dopiero później wyjścia. Jeśli program dobrze zlicza to bez różnicy czy najpierw dane będą wszystkie wpisane, a dopiero później wyświetlane czy na przemian, gdyż wejście i wyjście jest takie same w obu przypadkach, ale jeśli chcesz mieć tak jak mówisz to nie widzę problemu by przechować wyniki w zmiennych, a później je wypisać - to sam możesz zrobić.
komentarz 14 maja 2015 przez Wiktor Kiślak Użytkownik (610 p.)
Tylko mówie:D
komentarz 14 maja 2015 przez Xeon Użytkownik (800 p.)
To tak samo jak ja :)
0 głosów
odpowiedź 14 maja 2015 przez Fulaphex Początkujący (470 p.)

To co wczoraj w nocy napisalem rzeczywiscie mialo blad. Tutaj poprawiona wersja. Mam nadzieje, ze tym razem uda sie i nie bedzie bledna :)

#include <cstdio>
#define MAX 100
using namespace std;
int main(){
	long long tab[MAX+10];
	for(int i = 1; i < MAX; i++){
		tab[i] = MAX;
	}
	tab[0] = 0;
	for(int i = 0; i < MAX; i++){
		if(tab[i+1] > tab[i]+1){
			tab[i+1] = tab[i] + 1;
		}
		if(tab[i+4] > tab[i]+1){
			tab[i+4] = tab[i] + 1;
		}
		if(tab[i+5] > tab[i]+1){
			tab[i+5] = tab[i] + 1;
		}
	}
	int T;
	scanf("%d", &T);
	while(T--){
		long long a, b;
		scanf("%lld%lld", &a, &b);
		a = b - a;
		if(a <= 20){;
			printf("%d\n", tab[a]);
		}
		else{
			printf("%lld\n", (a/20 - 1)*4 + tab[a%20+20]);
		}
	}
	return 0;
}

 

Podobne pytania

+2 głosów
1 odpowiedź 754 wizyt
pytanie zadane 1 lipca 2015 w C i C++ przez Lopez Początkujący (460 p.)
+6 głosów
4 odpowiedzi 3,945 wizyt
pytanie zadane 16 kwietnia 2015 w C i C++ przez Qhoros Mądrala (7,110 p.)
0 głosów
2 odpowiedzi 389 wizyt

92,617 zapytań

141,466 odpowiedzi

319,783 komentarzy

61,999 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...