问题 G: 找零钱
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 128 MB
解决: 557提交: 796统计
题目描述
小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。
纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;
输入
有多组数据 1<=n<=99;
输出
对于每种数量不为0的纸币,输出他们的面值数量,再加起来输出
样例输入 Copy
25
32
样例输出 Copy
201+51
201+101+12
简单的贪心算法,没什么好讲的。
#include<stdio.h>
#include<iostream>
#include<cstring>
using namespace std;
int main() {
int N;
int b[5] = {50,20,10,5,1};
int a[5];
while(~scanf("%d",&N)) {
int k = 0;
memset(a,0,sizeof(a));
while(N>=50) {
a[0]++;
N-=50;
k = 1;
}
while(N>=20) {
a[1]++;
N-=20;
k = 2;
}
while(N>=10) {
a[2]++;
N-=10;
k=3;
}
while(N>=5) {
a[3]++;
N-=5;
k = 4;
}
while(N>=1) {
a[4]++;
N-=1;
k = 5;
}
//不管哪种币都会遍历,所以k保存的是最后面的一个币值,,,
//遍历都最后一个币值,那就判断;
for(int i = 0; i < 5; i++) {
if(a[i]!=0) {
printf("%d*%d",b[i],a[i]);
if(i+1!=k) printf("+");
}
}
printf("\n");
}
return 0;
}
问题 A: 看电视
[命题人 : 外部导入]
时间限制 : 1.000 sec 内存限制 : 32 MB
解决: 1049提交: 2262统计
题目描述
暑假到了,小明终于可以开心的看电视了。但是小明喜欢的节目太多了,他希望尽量多的看到完整的节目。
现在他把他喜欢的电视节目的转播时间表给你,你能帮他合理安排吗?
输入
输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示小明喜欢的节目的总数。
接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个节目的开始和结束时间,为了简化问题,每个时间都用一个正整数表示。
当n=0时,输入结束。
输出
对于每组输入,输出能完整看到的电视节目的个数。
样例输入 Copy
12
1 3
3 4
0 7
3 8
15 19
15 20
10 15
8 18
6 12
5 10
4 14
2 9
0
样例输出 Copy
5
这道题是区间贪心的思想
其实可以发现,对于x排序即可,x相同,y怎么排都无所谓对这道题来说
但是如果要求 包含所有区间的点的最小值
那么此时就必须注意对y的排序必须从小排,因为所以,你好好想一想把,就是区间小的肯定会包含区间大的,,,,而区间大的你设立一个点,这个点不一定会覆盖到,,,但是发现其实也不用关心,,,因为它的判断条件是y小于lastX 那么此时可以假定,这个点就应该是在区间小的部分,那么y怎么排也还是无所谓。
#include<stdio.h>
#include<cstring>
#include<algorithm>
using namespace std;
struct t {
int x,y;
} T[200];
bool cmp(t a, t b) {
if(a.x!=a.y) return a.x > b.x;
else return a.y<b.y;
}
int main() {
int N;
while(~scanf("%d",&N)&&N!=0) {
for(int i = 0; i < N; i++) {
int a,b;
scanf("%d%d",&a,&b);
T[i].x = a;
T[i].y = b;
}
sort(T,T+N,cmp);
int ans = 1;
int lastX = T[0].x;
for(int i =1; i < N; i++) {
if(T[i].y<=lastX) {
ans++;
lastX = T[i].x;
}
}
printf("%d\n",ans);
}
return 0;
}
矩形镶嵌问题,ceil函数的使用,记得里面的数必须用double,
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
int n,m;
double a,b,c;
scanf("%d%d",&n,&m);
scanf("%lf",&a);
b = ceil(n / a);
c = ceil(m / a);
printf("%.f",b*c);
}