【MAC 上学习 C++】Day 50-2. 实验8-1-8 报

2019-10-13  本文已影响0人  RaRasa

实验8-1-8 报数 (20 分)

1. 题目摘自

https://pintia.cn/problem-sets/13/problems/549

2. 题目内容

报数游戏是这样的:有n个人围成一圈,按顺序从1到n编好号。从第一个人开始报数,报到m(<n)的人退出圈子;下一个人从1开始报数,报到m的人退出圈子。如此下去,直到留下最后一个人。

本题要求编写函数,给出每个人的退出顺序编号。

函数接口定义:

void CountOff( int n, int m, int out[] );
其中n是初始人数;m是游戏规定的退出位次(保证为小于n的正整数)。函数CountOff将每个人的退出顺序编号存在数组out[]中。因为C语言数组下标是从0开始的,所以第i个位置上的人是第out[i-1]个退出的。

输入样例:

11 3

输出样例:

4 10 1 7 5 2 11 9 3 6 8

3. 源码参考
#include <iostream>

using namespace std;

#define MAXN 20

void CountOff( int n, int m, int out[] );

int main()
{
    int out[MAXN], n, m;
    int i;

    cin >> n >> m;
    CountOff( n, m, out );   
    for ( i = 0; i < n; i++ )
    {
      cout << out[i] << " ";
    }

    cout << endl;

    return 0;
}

void CountOff( int n, int m, int out[] )
{
  int i, cnt;
  int a[MAXN] = { 1 };
  int c;

  i = 0;
  while(i < n)
  {
    a[i++] = 1;
  }

  cnt = 0;
  i = 0;
  c = 0;
  while(cnt < n)
  {
    if(a[i] == 1)
    {
      c++;
    }

    if(c == m)
    {
      out[i] = ++cnt;
      a[i] = 0;
      c = 0;
    }
    
    i++;
    if(i == n)
    {
      i = 0;
    }
  }

  return;
}
上一篇下一篇

猜你喜欢

热点阅读