Задача - считалочка. Дети (n штук) встают в круг и начиная с некотогрого проговаривают считалочку. В ней m слов. Каждый m - тый вылетает. И так пока не останется один. Определить его номер.


// DESCRIPTION ////////////////////////////////////////////////////////////////////////////////////////////////////
// Children rise in a circle clockwise. Since one of them                                             //
// appropriates the numbers from 1 up to N, where N - amount of children.               //
// The amount of words in a children game is set. Program is necessary                      //
// to determine number of the participant saved after recalculation.                             //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <conio.h>
#include <stdio.h>
int * link; // Array of links
int n,m; // Total children and words
char cha,chb;
void main(){
     do{
          //----------- PREPARATION PART ----------------------------------
          clrscr(); // Preparation of the screen for work
          do{ // Input
               printf("Введите количество детей: "); scanf("%d",&n);
               printf("Введите число слов в считалочке: "); scanf("%d",&m);
          }while(n<2||m<1); // While isn't correct
          link=new int[n]; // Creating an array
          for(int i=0;i<n-1;i++) link[i]=i+1; // Preparation them for working
          link[n-1]=0;
          //------------ CALCULATING PART ---------------------------------
          for(int d=0, k=1;k<n;k++){
               for(int p=1;p<m;p++){ d=link[d];
                    link[d]=link[link[d]];
                    d=link[d];
               }
          }
          //------------ TERMINATING PART ---------------------------------
          delete [] link; // Destroying the array
          printf("Остался ребенок за номером: %d\n",d+1); //Output
          printf("\n\nВы желаее продолжить? (Y/N) ");
          cha=getch();
          if(!(cha=='Y'||cha=='y')){
               printf("\nВы уверены, что хотите завершить работу? (Y/N) ");
               chb=getch();
          }
     }while((cha=='Y'||cha=='y')||(!(chb=='Y'||chb=='y')));
     clrscr();
} //The end

[Top] [Home]

Используются технологии uCoz