求一圈中留下的最后一个人

有n(n<=50)个人围成一圈,从1开始顺序排号,从第1个人开始报数,从1报到m(m<=50),凡是报到m的人退出圈子,问最后留下的是原来第几序号的人?要求如下。 (1)用函数实现报数并退出。 (2)n和m的值由main函数输入并通过实参传送给该函数,最后结果由main函数输出。 (3)要求使用指针。

输入格式:
测试数据有多组,处理到文件尾。每组测试数据在同一行上输入自然数n和m(n<=50,m<=50)

输出格式:
输出最后留下的那个人原来的序号
在这里插入图片描述

在这里插入代码片

#include <stdio.h>
int countPeople(int *pn,int *pm)//n 为人数
{
int n = *pn,m = *pm;
int nums[50],i,k=0,j=0;
for(i=0;i<n;i++)//初始化数组
nums[i] = 0;
for(i=0;j<n;i++)
{
if(nums[i%n] == 0)
{
k++;
if(k%m==0)
{
nums[i%n]=1;
j++;
}
}
}
return (i-1)%n + 1;
}
int main()
{
int m,n,i;
int *pm = &m,*pn = &n;
while(scanf("%d %d",pn,pm) != EOF)//进行多次输入代码。
{
i = countPeople(pn,pm);
printf("%d\n",i);
}
return 0;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值