思路:首先看能兑换多少个三分硬币的,然后当三分硬币分别为1,2,3,.... n时有多少个2分硬币的,为什么要这样确定了?因为只要还可以兑换出三分硬币和二分硬币的那么剩下的价值一定可以让价值为1的硬币塞满。开头为什么s为N/3+1呢?因为可以这样想,假设N=7,那么只包含3分硬币和1分硬币的组合方式为:3,3,1; 3,1,1,1,1;所以N/3是实际上可以容纳三分硬币的个数。而增加1是因为可以全部换成1分的硬币。有人会疑问,那么t = (N-3*i)/2不是会重复吗?这是不可能的,因为硬币的价值是递增的,只有当i的值为N/3时,t的值可以为0或者1。所以不会重复。

CODE:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;

int N;

int main()
{
    while(~scanf("%d", &N))
    {
        int s = N/3+1;
        for(int i = 0 ; i <= N/3 ; i++)
        {
            int t = (N-3*i)/2;
            s += t;
        }
        printf("%d\n", s);
    }

} 

posted on 2012-07-18 11:12  有间博客  阅读(236)  评论(0编辑  收藏  举报