Informatică, întrebare adresată de pmarian98, 8 ani în urmă

#632 Iepuri

Gigel are p iepuri pe care vrea să-i distribuie în n cuști astfel încât:

toți iepurii să intre în cuști
fiecare cușcă să conțină cel puțin un iepure
să nu existe două cuști cu același număr de iepuri
diferența dintre numărul maxim de iepuri dintr-o cușcă și numărul minim de iepuri dintr-o cușcă să fie minimă
Determinați o modalitate de distribuire a iepurilor în cuști care să respecte condițiile de mai sus.

Date de intrare
Programul citește de la tastatură numerele n și p.

Date de ieșire
Programul va afișa pe ecran n numere naturale, reprezentând numărul de iepuri din fiecare cușcă..

Restricții și precizări
1 ≤ n ≤ 100
1 ≤ p ≤ 1 000 000
pentru toate datele de test există soluție



Exemplu
Intrare

3 10
Ieșire

2 3 5

Răspunsuri la întrebare

Răspuns de boiustef
3

Răspuns:

#include <iostream>

using namespace std;

int p, n, i, v[102], s, c, a, r;

int main()

{

   cin >> n >> p;

   for (i=1; i<=n; ++i)

       { v[i]=i; s=s+i; }

   a=(p-s)/n;

   for (i=1; i<=n; ++i) v[i]+=a;

   r=(p-s)%n;

   for (i=n-r+1; i<=n; ++i) ++v[i];

   for (i=1; i<=n; ++i)

       cout << v[i] << " ";

}

Explicație:

https://pastebin.com/iM7dskYD

Am plasat şi link-ul de pe pastebin, în caz că ai probleme la copy/paste

Am folosit suma Gaus 1+2+... +n

am plasat în vector primele n numere naturale distincte, de la 1 la n

Prin  a=(p-s)/n;  am aflat cât se poate adăuga la fiecare, dacă p > s

prin  r=(p-s)%n;  am aflat ce rest a mai rămas de adăugat, şi în fine am adăugat câte 1 la ultimii r termeni

Succese, sănătate  şi Paşte fericit

Alte întrebări interesante