方法一:暴力解法(遍历):

int main()
{
    int n, count = 0;

    cin >> n;
    for(int i = 0; i <= n/5; i++)
    {
        for(int j = 0; j <= n/2; j++)
        {
            if((i*5 + j*2) > n)
            {
                break;
            }
            for(int k = 0; k <= n; k++)
            {
                if((i*5 + j*2 + k) > n)
                {
                    break;
                }
                else if((i*5 + j*2 + k) == n)
                {
                    count++;
                }
            }
        }
    }
    cout << count << endl;

    return 0;
}

方法二:只需考虑5元和2元,只要不超过n,剩下的全换1元即是1种方法

int main()
{
    int n, count = 0;

    cin >> n;
    for(int i = 0; i <= n/5; i++)
    {
        for(int j = 0; j <= n/2; j++)
        {
            if((i*5 + j*2) > n)
            {
                break;
            }
            else
            {
                count++;
            }
        }
    }
    cout << count << endl;

    return 0;
}

方法三:先取出i张5元,剩下的钱只用2元和1元。则剩下的钱,只用1元为1种方法,能换1张2元则多一种方法,即剩下的钱/2+1种方法

int main()
{
    int n, count = 0;

    cin >> n;
    for(int i = 0; i <= n/5; i++)
    {
        count += (n - 5*i)/2 + 1;
    }
    cout << count << endl;

    return 0;
}