hdoj-2566-统计硬币(解题报告)

来源:互联网 发布:英国可以用淘宝吗 编辑:程序博客网 时间:2024/06/01 07:46

题目来源:http://acm.hdu.edu.cn/showproblem.php?pid=2566

问题描述:

统计硬币

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 7712    Accepted Submission(s): 5263

Problem Description

假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。

Input

输入数据第一行有一个正整数T,表示有T组测试数据;
接下来的T行,每行有两个数n,m,n和m的含义同上。

Output

对于每组测试数据,请输出可能的组合方式数;
每组输出占一行。

Sample Input

23 54 8

Sample Output

12

Author

lemon
 

题目分析:求n个硬币,总面值为m有多少种情况。

解题思路:感觉这道题和‘百钱买百鸡’的题目类似,用双重循环分别控制5分和2分硬币个数,k=n-i-j保证了是n个硬币,若总钱数为m,则计数累加。

错误原因:开始时循环条件没有控制好,导致k可能为负数,某些数据不正确。

代码实现:

#include<stdio.h>int main (void){    int T,m,n,i,j,k,a;    scanf("%d",&T);    while(T--)    {       a=0;       scanf("%d%d",&n,&m);           for(i=0;i<=m/5;i++)           {                for(j=0;j<=m/2;j++)                {                    k=n-i-j; //保证硬币和为n                    if(k>=0 &&(i*5+j*2+k==m)) //注意,k不能为负数                            a++;                }           }       printf("%d\n",a);    }    return 0;}


0 0
原创粉丝点击