武汉科技大学ACM :1009: 华科版C语言程序设计教程(第二版)习题6.11

Problem Description

n个人围成一圈,依次从1至n编号。从编号为1的人开始1至k报数,凡报数为k的人退出圈子,输出最后留下的一个人原来的编号。

Input

 首先输入一个t,表示有t组数据(1<= t <= 10010)

然后有t行,每行有2个正整数n和k。(1<= n,k<= 20)

Output

 对于每组测试数据,输出一个数,表示最后留下来的人的编号。

Sample Input

3
10 3
7 1
5 4

Sample Output

4
7
1

HINT

 例如第三组样例:5个人围成一圈,编号1-5。第一轮报数4号出列,第二轮从5开始报数1,3报4,3出列,第三轮从5开始报1,5报4,5出列,第四轮1开始报1,2报4,2出列,最后剩下的为1号。

 

 1 #include <stdio.h>
 2 int main()
 3 {
 4     int i,j,m,out,n,num[100],*p;
 5     int count;
 6     while(scanf("%d",&count)!=EOF)
 7     {
 8         for(int k=0;k<count;k++)
 9         {
10             scanf("%d%d",&n,&m);
11             p=num;
12             for(i=0;i<n;i++)
13                 *(p+i)=i+1;
14             i=0;
15             j=0;
16             out=0;
17             while(out<n-1)
18             {
19                 if(*(p+i)!=0)
20                     j++;
21                 if(j==m)
22                 {            
23                     
24                     *(p+i)=0;
25                     j=0;
26                     out++;            
27                 }
28                 i++;
29                 if(i==n)
30                     i=0;
31             }
32             while(*p==0)
33                 p++;
34             printf("%d\n",*p);
35             
36         }    
37         
38     }
39     
40     return 1;
41 }

 

转载于:https://www.cnblogs.com/liuwt365/p/4159549.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值