钱币兑换问题(1284)

来源:互联网 发布:id矢量制图软件 编辑:程序博客网 时间:2024/04/30 15:05
在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。
 

Input
每行只有一个正整数N,N小于32768。
 

Output
对应每个输入,输出兑换方法数。
 

Sample Input
293412553
 

Sample Output
718831

13137761

一:数学

#include <stdio.h> #include <string.h>  #include <math.h>  #include <stdlib.h>  #include <ctype.h> int main()  {long long int san,er,yi;long long int sum,count;int N;while(scanf("%d",&N)!=EOF){count=0;for(san=0;san*3<=N;san++)    //三块的个数{sum=N-san*3;if(sum%2==0)    //二块的个数,剩下的只能是一块的个数count+=sum/2;elsecount+=(sum-1)/2;}count+=(long long int)((double)(N)/3)+1;printf("%I64d\n",count);}           return 0;  }

二:dp
#include <stdio.h> #include <string.h>  #include <math.h>  #include <stdlib.h>  #include <ctype.h>  int main()  {  int dp[32769];    int i,j,n;    memset(dp,0,sizeof(dp));    dp[0]=1;    for(i=1;i<=3;i++)    {   for(j=i;j<=32768;j++)        {        dp[j]+=dp[j-i];        }    }       while(scanf("%d",&n)!=EOF){    printf("%d\n",dp[n]);    }     return 0;  } 



0 0
原创粉丝点击