20届第一次周测
b站讲解:https://www.bilibili.com/video/BV1oD4y1X7d3
HDU 1000 a+b problem
考察多组输入的使用。
#include<stdio.h>
int main(){
int a,b;
while(~scanf("%d%d",&a,&b)){
printf("%d\n",a+b);
}
return 0;
}
HDU 2033 人见人爱A+B
给n组数据,一组两个时分秒相加,求相加结果,注意分和秒遇60要取余,小时没有限制。
#include<stdio.h>
int main(){
int T;
scanf("%d",&T);
int AH,AM,AS,BH,BM,BS;
while(T--){
scanf("%d%d%d%d%d%d",&AH,&AM,&AS,&BH,&BM,&BS);
int a,b,c;//存答案 时分秒
c=(AS+BS)%60; //多少秒
b=(AM+BM+(AS+BS)/60)%60; //多少分钟
a=AH+BH+(AM+BM+(AS+BS)/60)/60; //多少小时
printf("%d %d %d\n",a,b,c);
}
return 0;
}
HDU 2005 第几天?
给出年月日,输出此日为这年的第几天,考察闰年和大小月判断。
#include<stdio.h>
int main()
{
int i, sum, month[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };
int moon, year, day;
while(~scanf("%d/%d/%d", &year, &moon, &day))
{
month[1]=28;
sum = 0;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
month[1] = 29;
for (i = 0; i < moon - 1; i++)
{
sum = sum + month[i]; //相加;
}
sum = sum + day;
printf("%d\n", sum);
}
return 0;
}
HDU 2021 发工资喽
简单贪心。
求至少需要多少人民币张数。
那么就是从面值最大的开始给,再给小的面值。逐一递减。
#include<stdio.h>
int main()
{
int n,sum,m,money[6]={100,50,10,5,2,1};
while(scanf("%d",&n),n){
sum=0;
while(n--){
scanf("%d",&m);
for(int i=0;i<6;i++){
sum+=m/money[i];
m%=money[i];
}
}
printf("%d\n",sum);
}
return 0;
}
HDU 2040 亲和数
考查了一个数中所有约数相加是否等于另一个数。
关键为写出求约数的过程
代码如下
#include<stdio.h>
#include<math.h>
int sum(int x){
int res = 0;
int h = sqrt(x)+0.5;
for(int i = 1;i < h;i++){
if(x % i==0)res=res + i + x/i;
}
return res-x;//自身不算,所以减x。
}
int main(){
int T;
scanf("%d",&T);
while(T--){
int a,b;
scanf("%d%d",&a,&b);
if(a==sum(b)&&b==sum(a))printf("YES\n");
else printf("NO\n");
}
return 0;
}