美团2017秋招笔试题 拼凑钱币

Posted 兴趣使然~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了美团2017秋招笔试题 拼凑钱币相关的知识,希望对你有一定的参考价值。

给你六种面额 1、5、10、20、50、100 元的纸币,假设每种币值的数量都足够多,编写程序求组成N元(N为0~10000的非负整数)的不同组合的个数。 
输入描述:
输入包括一个整数n(1 ≤ n ≤ 10000)
输出描述:
输出一个整数,表示不同的组合方案数


设f[i][j]为使用a[0]-a[i]的面额凑到j元的不同组合个数
#include <iostream>
#include <cstring>
using namespace std;
int a[6] = {1,5,10,20,50,100};
long long f[6][10001];
int main(){
    int n;
    cin >> n;
    memset(f, 0, sizeof(f));
    for(int j = 0; j <= n; j++){
        f[0][j] = 1;
    }

    for(int i = 1; i < 6; i++){
        for(int j = 1; j <= n; j++){
            for(int k = 0; k <= j/a[i]; k++){
                f[i][j] += f[i-1][j-k*a[i]];
            }
        }
    }
    cout << f[5][n] << endl;
    return 0;
}

 

以上是关于美团2017秋招笔试题 拼凑钱币的主要内容,如果未能解决你的问题,请参考以下文章

TX2017秋招笔试题之素数对

2017腾讯秋招笔试题之编码

2017腾讯秋招笔试题之编码

TX2017秋招笔试题之编码

TX2017秋招笔试题之geohash编码

程序员面试修炼10 | 携程2017秋招笔试题