|
Задача
- считалочка. Дети (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]
|