贪心算法
行吧,我提交了好几遍,直接穷举得到最小张数,还自己看不出哪错了,呜。。。🤦?🤦?🤦?🤦?
Time Limit: 1 Sec Memory Limit: 128 MB
Description
作为X大的老师,最盼望的日子就是每月的16号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵
但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
Input
第一行是一个整数n(n<100),表示老师的人数,接下来有n行,每行表示一个老师的工资。
Output
对于每个老师的工资,输出至少需要准备的人民币张数。每个输出占一行。
Sample Input Copy
3
1
2
3
Sample Output Copy
1
1
2
可能的Java代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
for(int i=0;i<n;i++)
{
int m=sc.nextInt();
int sum=0;
while(m>0)
{
sum=m/100;
m%=100;
sum+=m/50;
m%=50;
sum+=m/10;
m%=10;
sum+=m/5;
m%=5;
sum+=m/2;
m%=2;
sum+=m/1;
m%=1;
}
System.out.println(sum);
}
}
}
或者这样:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
for(int i=0;i<t;i++)
{
int n=sc.nextInt();
if(n>=0)
{
int sum=0;
sum+=n/100;
n=n%100;
sum+=n/50;
n=n%50;
//sum+=n/20;
//n=n%20;
//行吧,一开始我瞎了,,一直以为会有二十的,原来没有的,呀,没有的没有的,没有的!!!
//🤦?🤦?🤦?(论看清题的重要性つ﹏?),难怪一直错了几回,怎么改都不对,皱眉皱眉。
sum+=n/10;
n=n%10;
sum+=n/5;
n=n%5;
sum+=n/2;
n=n%2;
sum+=n/1;
n=n%1;
}
System.out.println(sum);
else
{}
}
}
}
运行结果:
Problem: XXXX
User: XXXXXXXXXXX
Language: Java
Result: Accepted
Time:118 ms
Memory:10220 kb
csEND