Oji 2004 clasa 6-a problema 2...
Problema 2. "Vânătoare" 100
puncte
Vânătorul şef al regelui
Arthur a primit însărcinare să vâneze primele raţe ce se întorc din ţările
calde. Regele fiind un tip cu idei fixe, i-a cerut vânătorului să vâneze raţele
albe cu săgeţi albe, iar raţele negre cu săgeţi negre.
Raţele vin în rânduri
(stoluri) din ce în ce mai mari: mai întâi una, apoi două, trei, cinci, opt,
treisprezece, ş.a.m.d. Se observă că numărul de raţe dintr-un rând este egal cu
numărul de raţe de pe cele două rânduri anterioare. Raţele fiind nişte creaturi
ordonate zboară în rânduri, în care nu vei putea găsi două raţe de aceeaşi
culoare alăturate, fiecare rând începând cu o raţă albă.
Vânătorul
ştie că dacă a început să doboare o raţă, trebuie să le doboare pe toate
de pe rândul acesteia, deoarece supravieţuitoarele vor alerta celelalte raţe şi
ele nu se vor mai întoarce niciodată, iar vânătorul nostru îşi va pierde
slujba.
Cerinţă
Ştiind că vânătorul a primit
ka săgeţi albe şi kb săgeţi negre, trebuie să determinaţi
câte rânduri de raţe a doborât şi câte săgeţi de fiecare tip i-au rămas, ştiind
că el vrea să-şi păstreze slujba.
Date de
intrare
Se citesc de la tastatură numerele ka şi kb (în această ordine).
Atenţie:
Valorile se introduc obligatoriu în această ordine!
Date de
ieşire
Se va afişa pe ecran:
- numărul de rânduri doborâte
- numărul de săgeţi albe rămase
- numărul de săgeţi negre rămase.
Restricţii
0≤ka,
kb≤2.000.000.000
Observaţie
Datele de intrare sunt
corecte (nu necesită validare).
Exemplu
Pentru ka=9
şi kb=10
Se va afişa:
4
2
6
Explicaţie
Pentru exemplu avem rândurile (A- raţă albă, N- raţă neagră) de raţe:
A
A N
A N A
A N A N A
Timp maxim de executare: 1 secundă/test
Răspunsuri la întrebare
Răspuns de
2
using namespace std;
#include <fstream>
ifstream f ("vanatoare.in");
ofstream g ("vanatoare.out");
int main()
{
int ka, kb, x=1, i=0, y=2,ok=0,z;
f>>ka>>kb;
if (ka-1>=0)
{
i++;
ka--;
}
if (ka-1>=0 && kb-1>=0)
{
i++;
ka--;
kb--;
}
while (ok==0)
{
z=x+y;
if (z%2==0)
{
if (ka-z/2>=0 && kb-z/2>=0)
{
ka=ka-z/2;
kb=kb-z/2;
i++;
}
else ok=1;
}
else
{
if (ka-(z/2+1)>=0 && kb-z/2>=0)
{
ka=ka-(z/2+1);
kb=kb-z/2;
i++;
}
else ok=1;
}
x=y;
y=z;
}
g<<i<<'\n'<<ka<<'\n'<<kb;
f.close ();
g.close ();
return 0;
}
#include <fstream>
ifstream f ("vanatoare.in");
ofstream g ("vanatoare.out");
int main()
{
int ka, kb, x=1, i=0, y=2,ok=0,z;
f>>ka>>kb;
if (ka-1>=0)
{
i++;
ka--;
}
if (ka-1>=0 && kb-1>=0)
{
i++;
ka--;
kb--;
}
while (ok==0)
{
z=x+y;
if (z%2==0)
{
if (ka-z/2>=0 && kb-z/2>=0)
{
ka=ka-z/2;
kb=kb-z/2;
i++;
}
else ok=1;
}
else
{
if (ka-(z/2+1)>=0 && kb-z/2>=0)
{
ka=ka-(z/2+1);
kb=kb-z/2;
i++;
}
else ok=1;
}
x=y;
y=z;
}
g<<i<<'\n'<<ka<<'\n'<<kb;
f.close ();
g.close ();
return 0;
}
Alte întrebări interesante
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Engleza,
9 ani în urmă