# 比酒量

有一群海盗（不多于20人），在船上比拼酒量。过程如下：打开一瓶酒，所有在场的人平分喝下，有几个人倒下了。再打开一瓶酒平分，又有倒下的，
再次重复...... 

直到开了第4瓶酒，坐着的已经所剩无几，海盗船长也在其中。当第4瓶酒平分喝下后，大家都倒下了。

等船长醒来，发现海盗船搁浅了。他在航海日志中写到：“......昨天，我正好喝了一瓶.......奉劝大家，开船不喝酒，喝酒别开船......”

请你根据这些信息，推断开始有多少人，每一轮喝下来还剩多少人。

如果有多个可能的答案，请列出所有答案，每个答案占一行。

格式是：人数,人数,...

例如,有一种可能是：```20,5,4,2,0```



## aop

### before

```cpp
#include <cstdio>
#include <iostream>
using namespace std;
int d, a1[4];
```
### after

```cpp
int main()
{
    for (int sum = 20; sum >= 1; sum--)
    {
        for (int a = 1; a <= 20; a++)
        {
            for (int b = 1; b <= 20; b++)
            {
                for (int c = 1; c <= 20; c++)
                {
                    a1[0] = sum, a1[1] = a, a1[2] = b, a1[3] = c;
                    if (getS(a1) == a1[0] && a > b && b > c && sum > a)
                    {
                        printf("%d, %d, %d, %d, 0\n", sum, a, b, c);
                    }
                }
            }
        }
    }
    return 0;
}
```

## 答案

```cpp
int d1(int *a1)
{
    int sum = a1[0];
    for (int i = 1; i < 4; i++)
    {
        if (sum % a1[i] != 0)
            return i;
    }
    return 0;
}
int getS(int *a1)
{
    int sum = 0, ss = 1;
    while (d1(a1) != 0)
    {
        int index = d1(a1);
        a1[0] = a1[0] * a1[index];
        ss = a1[index];
    }
    for (int i = 1; i < 4; i++)
    {
        sum += (a1[0] / a1[i]);
    }
    return sum + ss;
}
```
## 选项


### A

```cpp
int d1(int *a1)
{
    int sum = a1[0];
    for (int i = 1; i < 4; i++)
    {
        if (sum % a1[i] != 0)
            return i;
    }
    return 0;
}
int getS(int *a1)
{
    int sum = 0, ss = 1;
    while (d1(a1) != 0)
    {
        int index = d1(a1);
        a1[0] = a1[0] * a1[index];
        ss = a1[index];
    }
    for (int i = 1; i <= 4; i++)
    {
        sum += (a1[0] / a1[i]);
    }
    return sum + ss;
}
```

### B

```cpp
int d1(int *a1)
{
    int sum = a1[0];
    for (int i = 1; i <= 4; i++)
    {
        if (sum % a1[i] != 0)
            return i;
    }
    return 0;
}
int getS(int *a1)
{
    int sum = 0, ss = 1;
    while (d1(a1) != 0)
    {
        int index = d1(a1);
        a1[0] = a1[0] * a1[index];
        ss = a1[index];
    }
    for (int i = 1; i <= 4; i++)
    {
        sum += (a1[0] / a1[i]);
    }
    return sum + ss;
}
```

### C

```cpp
int d1(int *a1)
{
    int sum = a1[0];
    for (int i = 1; i < 4; i++)
    {
        if (sum % a1[i] != 0)
            return i;
    }
    return 0;
}
int getS(int *a1)
{
    int sum = 0, ss = 1;
    while (d1(a1) != 0)
    {
        int index = d1(a1);
        a1[0] = a1[0] * a1[index];
        ss = a1[index];
        sum += ss;
    }
    return sum;
}
```
