👤

VA ROG MULT!!

Numerele de la 1 la n sunt asezate in ordine crescatoare pe circumferinta unui cerc astfel incat n ajunge langa 1. Incepand cu numarul s, se elimina numerele din cerc din k in k, dupa fiecare eliminare cercul strangandu-se. Care va fi numarul ce va ramane ultimul?

Ex: daca vectorul initial este (1,2,3,4,5,6,7,8,9,10),iar k=3,s=1 se vor elimina pe rand numerele 3,6,9,2,7,1,8,5,10 si ramane numarul 4.


Răspuns :

Răspuns:

#include <iostream>

using namespace std;

int n,i,j,s,k,v[100];

int main()

{

   cin >> n >> s >> k;

   int nr=n;

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

       v[i]=i;

   i=s;

   while (nr>1)

   {

       j=0;

       while (j<k)

       {

           if (v[i])

           {

               ++j;

               if (j==k)

               {

                   --nr;

                   v[i]=0;

               }

           }

           ++i;

           if (i>n) i=1;

       }

   }

   i=1; while (v[i]==0) ++i;

   cout << v[i];

   return 0;

}

Explicație: