报数退出问题

m个人围成一圈,1,2,3循环报数,报到3的人退出,并将退出的序号依次存到数组p中,包括最后一个人的序号。输出最后退出的是原来的第几号(最初的序号,以1起始)。若m=6,则最后退出的是1号,退出的顺序是 : 3 6 4 2 5 1;若m=10,则最后退出的是4号,退出顺序是: 3 6 9 2 7 1 8 5 10 4;若m=100,则最后退出的是91号,退出顺序是: 3 6 9……100 58 91。
编写函数int fun(int m ,int  p[ ])实现上述功能,返回m个人中最后退出人的序号,并将退出的序号顺序写入p指向的数组中。在主函数中输入人数,调用fun后输出实参数组中保存的退出序号。每行输出10个数据。
本问题限定人数m不超过200人。

【输入形式】输入人数(不大于200的整数)
【输出形式】输出最后退出人的序号,以及退出的顺序
【样例输入】:Input numbe:6
【样例输出】:
Last exit person is 1
Exit order:
3 6 4 2 5 1

#include<stdio.h>
void main()
{
	int n,la;       
	int i;
	int str[1000];
	printf("Input numbe:");
	scanf("%d",&n);
	la=fun(n,str);
	printf("Last exit person is %d\n",la);
	printf("Exit order:\n");
	for(i=0;i<n;i++)
	{	printf("%d ",str[i]);
		if((i+1)%10==0)
			printf("\n");
	}
}

int fun(int m,int *p)
{
	int s[10000],last;
	int i,j,k,t;
	k=0;
	t=0;
	for(i=0;i<m;i++)
		s[i]=i+1;
	for(i=0;t<m;i++)
	{
		for(j=0;j<m;j++)
		{	if(s[j]!=0)
			{
				k++;
				if(k%3==0)
				{
					p[t]=s[j];
					t++;
					s[j]=0;
					k=0;
				}
			}
		}
	}
	return p[t-1];
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Angostura

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值