hdu 2566 统计硬币
2024-09-19 21:57:12
http://acm.hdu.edu.cn/showproblem.php?pid=2566
假设一堆由1分、2分、5分组成的n个硬币总面值为m分,求一共有多少种可能的组合方式(某种面值的硬币可以数量可以为0)。
输入数据第一行有一个正整数T,表示有T组测试数据;
接下来的T行,每行有两个数n,m,n和m的含义同上。
接下来的T行,每行有两个数n,m,n和m的含义同上。
对于每组测试数据,请输出可能的组合方式数;
每组输出占一行。
每组输出占一行。
Sample Input
2
3 5
4 8
Sample Output
1
2
【题解】: 这里没有给出n,m的范围,建议使用第三种【code3】方式解
【code1】:暴力O(N*N)
#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,n,m,j;
scanf("%d%d",&n,&m);
int cnt=;
for(i=;i<=m/;i++)
{
for(j=;j<=m/;j++)
{
if(n-i-j+j*+i*==m&&n-i-j>=)
{
cnt++;
}
}
}
printf("%d\n",cnt);
}
return ;
}
【code2】:暴力 O(N)
似乎只要1、2、5,硬币的个数中的一个固定了,另外两个也就一定
#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int i,n,m;
scanf("%d%d",&n,&m);
int cnt=;
for(i=;i<=m/;i++)
{
int ln = n-i;
int lm = m-i*;
if(lm>=ln&&lm<=*ln)
{
cnt++;
}
}
printf("%d\n",cnt);
}
return ;
}
【code3】:优化(推荐)
#include <iostream>
#include <stdio.h>
#include <string.h> using namespace std; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m,mins,maks;
scanf("%d%d",&n,&m);
if(m>=n) maks=(m-n)/;
else
{
puts("");
continue;
}
if(m-*n>=)
{
if((m-*n)% == )
mins=(m-*n)/;
else
mins=(m-*n)/ + ;
}
else mins=;
printf("%d\n",maks-mins+);
}
return ;
}
最新文章
- iOS 正确选择图片加载方式
- 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
- Android ndk另一种注册方式
- IOS第二天多线程-03对列组合并图片
- 重构24-Remove Arrowhead Antipattern(去掉箭头反模式)
- 李洪强漫谈iOS开发[C语言-040]-switch case
- poj2376
- 【转】Emmagee app性能测试工具使用教程
- php笔试算法题:顺时针打印矩阵坐标-蛇形算法
- 从C#到TypeScript - Proxy
- java TreeSet 应用
- BCryptPasswordEncoder加密及判断密码是否相同
- JAVA序列化基础知识
- 《python语言程序设计》_第三章(数字函数、字符串和对象)
- ajax 上传文件给webapi(带basic认证)
- flask中的wtforms使用
- git tag 常用操作
- 【转】每天一个linux命令(1):ls命令
- python-异常
- java使用elasticsearch分组进行聚合查询(group by)-项目中实际应用