HDOJ 2021 发工资咯:)解题报告
这两天有点不在状态,
不知道搞什么,今天max sum WA 了无数次,,,就是找不到哪里出问题了。。郁闷。
索性去后面拿一道简单的题目来做,就选了这一题,。。。
一遍就AC了,
就是顺着题目的意思来写,
写代码的时候有些地方没考虑清楚,耗了一点时间,
不过写完之后还是一遍AC了,,
发工资咯:)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 22007 Accepted Submission(s): 12473
Problem Description
作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵
但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
Input
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。
n=0表示输入的结束,不做处理。
n=0表示输入的结束,不做处理。
Output
对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
Sample Input
3
1 2 3
0
Sample Output
4
Author
lcy
代码如下:
1 #include<stdio.h> 2 int main() 3 { 4 int n,i,t,temp,sum; 5 long a[100]={0}; 6 while(scanf("%d", &n)!=EOF && n!=0) 7 { 8 for(i=0;i<n;i++) 9 scanf("%d",&a[i]); 10 for(i=0,sum=0;i<n;i++) 11 { 12 temp=0; 13 t=a[i]/100; 14 a[i]-=100*t; 15 temp+=t; 16 t=a[i]/50; 17 temp+=t; 18 a[i]-=50*t; 19 t=a[i]/10; 20 temp+=t; 21 a[i]-=10*t; 22 t=a[i]/5; 23 temp+=t; 24 a[i]-=5*t; 25 t=a[i]/2; 26 temp+=t; 27 a[i]-=2*t; 28 t=a[i]/1; 29 temp+=t; 30 sum+=temp; 31 } 32 printf("%d\n",sum); 33 } 34 return 0; 35 }
其实思路都是一样的,找出每一个老师对应的工资的最少张数,然后加起来就是了。。
这个代码绝对不是好的代码。。。
优化之后的代码,应该还差不多吧。。。。。。。
1 #include<stdio.h> 2 int main() 3 { 4 int s[100]; 5 int sum, i, j, temp, n; 6 int m1, m2, m3, m4, m5, m6; 7 while(scanf("%d", &n)!=EOF && n!=0) 8 { 9 for(i=0,sum=0;i<n;i++) 10 { 11 scanf("%d", &s[i]); 12 m1=s[i]/100; 13 m2=s[i]%100/50; 14 m3=s[i]%100%50/10; 15 m4=s[i]%100%50%10/5; 16 m5=s[i]%100%50%10%5/2; 17 m6=s[i]%100%50%10%5%2/1; 18 sum+=m1+m2+m3+m4+m5+m6; 19 } 20 printf("%d\n", sum); 21 } 22 return 0; 23 }