hdu 2021 發工資咯:)(c語言)
阿新 • • 發佈:2018-12-05
hdu 2021 發工資咯:)
題目描述
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
作為杭電的老師,最盼望的日子就是每月的8號了,因為這一天是發工資的日子,養家餬口就靠它了,呵呵
但是對於學校財務處的工作人員來說,這一天則是很忙碌的一天,財務處的小胡老師最近就在考慮一個問題:如果每個老師的工資額都知道,最少需要準備多少張人民幣,才能在給每位老師發工資的時候都不用老師找零呢?
這裡假設老師的工資都是正整數,單位元,人民幣一共有100元、50元、10元、5元、2元和1元六種。
Input
輸入資料包含多個測試例項,每個測試例項的第一行是一個整數n(n<100),表示老師的人數,然後是n個老師的工資。
n=0表示輸入的結束,不做處理。
Output
對於每個測試例項輸出一個整數x,表示至少需要準備的人民幣張數。每個輸出佔一行。
Sample Input
3
1 2 3
0
Sample Output
4
問題解答一
這是最初的構想和邏輯,但明顯該程式碼太低長,很多都是重複內容,寫起來不方便,太幼稚了
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,a[100];
while( scanf("%d",&n)!=EOF && n!=0 )
{
for(int i=0;i<n;++i)//錄入工資
scanf("%d",&a[i]);
int sum=0;
for(int i=0;i<n;++i)//遍歷每個老師的工資
{
if( a[i]>=100 )
{
sum+=a[i]/100;
a[i]%=100 ;
}
if( a[i]>=50 )
{
sum+=1;
a[i]-=50;
}
if( a[i]>=10 )
{
sum+=a[i]/10;
a[i]%=10;
}
if( a[i]>=5 )
{
sum+=1;
a[i]-=5;
}
if( a[i]>=2 )
{
sum+=a[i]/2;
a[i]%=2;
}
if( a[i]!=0 )
{
sum+=a[i];
}
}
printf("%d\n",sum);
}
return 0;
}
問題解答二
上面那種繁複的程式碼執行成功後,這是簡化版的改版,邏輯演算法是一樣的
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,salary,a[6]={100,50,10,5,2,1};
while( scanf("%d",&n)!=EOF && n!=0 )
{
int sum=0;
for(int j=0;j<n;++j)
{
scanf("%d",&salary);
for(int i=0;salary>0;++i)
if( salary>=a[i] )
{
sum+=salary/a[i];
salary%=a[i];
}
}
printf("%d\n",sum);
}
return 0;
}