1. 有N個人圍成一圈诺凡,順序排號沸柔,從第一個人開始報數(shù)暑刃,凡是報到M的人退出圈子勤讽,問最后留下的幾號?
#define N 15
int main(int argc, char const *argv[])
{
int M;
scanf("%d",&M);
int people[N]={0};
int people_remain = N;
int people_out = 0;
int people_count = 1;
int i = 0;
while(people_remain!=1){
if (0 == people[i]){
if(M == people_count){
people[i] = 1;
--people_remain;
++people_out;
people_count=1;
}
else
++people_count;
}
i=(i+1)%N;
}
for (int i = 0; i < N; ++i)
{
if (people[i] == 0)
printf("%d\n",i+1);
}
return 0;
}
2. N個人圍成一圈蟋座,從第S個人開始順時針1,2,3,4,...M的順序報數(shù),數(shù)到M的人出圈脚牍,然后從出圈的下一個人開始重復(fù)此過程向臀,輸出所有出圈的人的順序。
int main(int argc, char const *argv[])
{
int M,S,N;
printf("please input people number\n");
scanf("%d",&N);//總?cè)藬?shù)
printf("please input counting cycle\n");
scanf("%d",&M);//報數(shù)循環(huán)
printf("please input counting start people\n");
scanf("%d",&S);//從第幾個人開始
int *people =(int *)calloc(N,sizeof(int));
int people_remain = N;
int people_out = 0;
int people_count = 1;
int i = S-1;
printf("出圈人的順序為:");
while(people_remain!=1)
{
if (0 == people[i])
{
if(M == people_count)
{
printf("%d,",i+1);
people[i] = 1;
--people_remain;
++people_out;
people_count=1;
}
else
++people_count;
}
i=(i+1)%N;
}
printf("\n");
for (int i = 0; i < N; ++i)
{
if (people[i] == 0)
printf("%d\n",i+1);
}
return 0;
}
** N個人圍成一圈诸狭,從第1個人開始順時針1,2,3,4,...M的順序報數(shù)券膀,數(shù)到M的人出圈,然后從出圈的下一個人開始重復(fù)此過程,直到圈中所剩的人數(shù)為M-1個人驯遇。輸出所有出圈的人的順序,并輸出剩余的人的編號**
int main(int argc, char const *argv[])
{
int M,N;
printf("please input people number\n");
scanf("%d",&N);
printf("please input counting cycle\n");
scanf("%d",&M);
int *people =(int *)calloc(N,sizeof(int));
int people_remain = N;
int people_count = 1;
int i = 0;
printf("出圈人的順序為:");
while(people_remain!=M-1)
{
if (0 == people[i])
{
if(M == people_count)
{
printf("%d,",i+1);
people[i] = 1;
--people_remain;
people_count=1;
}
else
++people_count;
}
i=(i+1)%N;
}
printf("\n");
printf("剩下的人的編號為:");
for (int i = 0; i < N; ++i)
{
if (people[i] == 0)
printf("%d,",i+1);
}
printf("\n");
return 0;
}