A - 发工资咯:)
http://acm.hdu.edu.cn/showproblem.php?pid=2021
但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢?
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
n=0表示输入的结束,不做处理。
3 1 2 3 0
4
#include<stdio.h>
#include<stdlib.h>
int a[6]={100,50,10,5,2,1};
int main()
{
int n;
while(~scanf("%d",&n),n)
{
int *b,sum=0,i,j,k;
b=(int *)calloc(n,sizeof(int));
for(i=0;i<n;i++)
{
scanf("%d",b+i);
for(j=0;j<6;j++)
{
sum+=b[i]/a[j];
b[i]=b[i]%a[j];
}
}
printf("%d\n",sum);
}
return 0;
}
B - 海选女主角
http://acm.hdu.edu.cn/showproblem.php?pid=2022
“做什么比较挣钱呢?筛沙子没力气,看大门又不够帅...”potato老师很是无奈。
“张艺谋比你还难看,现在多有钱呀,听说还要导演奥运开幕式呢!你为什么不去娱乐圈发展呢?”lwg在一旁出主意。
嗯,也是,为了生存,就委屈点到娱乐圈混混吧,马上就拍一部激光电影《杭电记忆——回来我的爱》。
说干就干,马上海选女主角(和老谋子学的,此举可以吸引媒体的眼球,呵呵),并且特别规定,演员必须具有ac的基本功,否则直接out!
由于策划师风之鱼(大师级水王)宣传到位,来应聘的MM很多,当然包括nit的蛋糕妹妹等呼声很高的美女,就连zjut的jqw都男扮女装来应聘(还好被安全顾问hdu_Bin-Laden认出,给轰走了),看来娱乐圈比acm还吸引人哪...
面试那天,刚好来了m*n个MM,站成一个m*n的队列,副导演Fe(OH)2为每个MM打了分数,分数都是32位有符号整数。
一开始我很纳闷:分数怎么还有负的?Fe(OH)2解释说,根据选拔规则,头发染成黄色、化妆太浓、穿的太少等等都要扣分数的,扣的多了就可能是负分了,当然,如果发现话语中夹有日语,就直接给-2147483648分了。
分数送上来了,是我做决定的时候了,我的一个选拔原则是,要选一个面试分数绝对值(必须还是32位整数)最大的MM。
特别说明:如果不幸选中一个负分的MM,也没关系,因为我觉得,如果不能吸引你,那要想法恶心你。
note:行号和列号从一开始,如果有多个MM的分数绝对值一样,那么输出排在最前面的一个(即行号最小的那个,如果行号相同则取列号最小的那个)。
2 3 1 4 -3 -7 3 0
2 1 -7
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int n,m,row,col,maxz;
void solve(int a[][100])
{
maxz=a[0][0];row=col=0;
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(fabs(maxz)<fabs(a[i][j]))
{
maxz=a[i][j];
row=i;
col=j;
}
}
}
printf("%d %d %d\n",row+1,col+1,maxz);
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
int i,j;
int a[100][100];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
scanf("%d",&a[i][j]);
solve(a);
}
return 0;
}
C - 求平均成绩
https://vjudge.net/problem/26705/origin
每个测试实例后面跟一个空行。
2 2 5 10 10 20
7.50 15.00 7.50 15.00 1
#include<stdio.h>
#define N 50
#define M 5
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int i,j;
double xueke[6]={0},tongxue[51]={0};
double a[51][6];
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%lf",&a[i][j]);
}
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
tongxue[i]+=a[i][j];
}
tongxue[i]/=(double)m;
}
for(j=0;j<m;j++)
{
for(i=0;i<n;i++)
{
xueke[j]+=a[i][j];
}
xueke[j]/=(double)n;
}
int sum=0;
for(i=0;i<n;i++)
{
int count=0;
for(j=0;j<m;j++)
{
if(a[i][j]>=xueke[j])
{
count++;
}
}
if(count==m)
{
sum++;
}
}
for(i=0;i<n;i++)
{
printf(i==n-1?"%.2lf\n":"%.2lf ",tongxue[i]);
}
for(j=0;j<m;j++)
{
printf(j==m-1?"%.2lf\n":"%.2lf ",xueke[j]);
}
printf("%d\n\n",sum);
}
return 0;
}
D - C语言合法标识符
http://acm.hdu.edu.cn/showproblem.php?pid=2024
3 12ajf fi8x_a ff ai_2
no yes no
#include<stdio.h>
#include<ctype.h>
#include<string.h>
int main()
{
int T;
scanf("%d",&T);
getchar();
while(T--)
{
int i,flag=1;
char str[60];
gets(str);
if((str[0]!='_')&&(!isalpha(str[0])))
{
flag=0;
}
for(i=1;i<strlen(str)&&flag;i++)
{
if(str[i]!='_'&&(!isdigit(str[i]))&&(!isalpha(str[i])))
{
flag=0;
}
}
if(flag)
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
}
E - 查找最大元素
http://acm.hdu.edu.cn/showproblem.php?pid=2025
abcdefgfedcba xxxxx
abcdefg(max)fedcba x(max)x(max)x(max)x(max)x(max)
#include<stdio.h>
#include<string.h>
int main()
{
char str[150];
while(~scanf("%s",str))
{
int i,a[100]={0},maxz=str[0];
for(i=0;i<strlen(str);i++)
{
if(maxz<str[i])
{
maxz=str[i];
memset(a,0,sizeof(a));
a[i]=1;
}
else if(maxz==str[i])
{
a[i]=1;
}
}
for(i=0;i<strlen(str);i++)
{
printf("%c",str[i]);
if(a[i]==1)
printf("(max)");
if(i==strlen(str)-1)
printf("\n");
}
}
return 0;
}
#include<stdio.h>
#include<string.h>
int main()
{
char n,i,str[100];
while(~scanf("%s",str))
{
int ans[100]={0};
char maxz=str[0];
for(i=0;str[i]!='\0';i++)
{
if(maxz<str[i])
{
maxz=str[i];
}
}
for(i=0;str[i]!='\0';i++)
{
if(maxz==str[i])
{
ans[i]=1;
}
}
for(i=0;str[i]!='\0';i++)
{
printf("%c",str[i]);
if(ans[i]==1)
printf("(max)");
}
printf("\n");
}
}
F - 首字母变大写
http://acm.hdu.edu.cn/showproblem.php?pid=2026
i like acm i want to get an accepted
I Like Acm I Want To Get An Accepted
#include<stdio.h>
#include<string.h>
int main()
{
int i;
char str[150];
while(gets(str))
{
for(i=0;i<strlen(str);i++)
{
if(i==0||str[i-1]==' ')
printf("%c",str[i]-32);
else
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}
G - 统计元音
a:num1
e:num2
i:num3
o:num4
u:num5
多个测试实例之间由一个空行隔开。
请特别注意:最后一块输出后面没有空行:)
2 aeiou my name is ignatius
a:1 e:1 i:1 o:1 u:1 a:2 e:1 i:3 o:0 u:1
#include<stdio.h>
#include<string.h>
#include<map>
using namespace std;
int main()
{
map<int,char> my;
my[1]='a';
my[2]='e';
my[3]='i';
my[4]='o';
my[5]='u';
int T;
scanf("%d",&T);
getchar();
while(T--)
{
char str[150];
int a[27]={0};
int i;
gets(str);
for(i=0;i<strlen(str);i++)
{
a[str[i]-'a']++;
}
for(i=1;i<=5;i++)
{
printf("%c:%d\n", my[i] ,a[my[i]-'a'] );
}
if(T)
printf("\n");
}
return 0;
}
H - Lowest Common Multiple Plus
http://acm.hdu.edu.cn/showproblem.php?pid=2028
2 4 6 3 2 5 7
12 70
#include<stdio.h>
int res(int a,int b)
{
return a%b==0?b:res(b,a%b);
}
int main()
{
int n;
while(~scanf("%d",&n))
{
int i,a,b;
scanf("%d",&a);
for(i=1;i<n;i++)
{
scanf("%d",&b);
a=a/res(a,b)*b;
}
printf("%d\n",a);
}
return 0;
}
I - Palindromes _easy version
http://acm.hdu.edu.cn/showproblem.php?pid=2029
4 level abcde noon haha
yes no yes no
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<string>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
while(n--)
{
string a,b;
cin>>a;
b=a;
reverse(a.begin(),a.end());
if(a==b)
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
}
J - 汉字统计
http://acm.hdu.edu.cn/showproblem.php?pid=2030
[Hint:]从汉字机内码的特点考虑~
2 WaHaHa! WaHaHa! 今年过节不说话要说只说普通话WaHaHa! WaHaHa! 马上就要期末考试了Are you ready?
14 9
#include<stdio.h>
#include<string.h>
int main()
{
char a[100001];
int n;
int i;
int s;
scanf("%d",&n);
getchar();
while(n--)
{
gets(a);
s=0;
for(i=0;i<strlen(a);i++)
{
if(a[i]<0)
s++;
}
printf("%d\n",s/2);
}
return 0;
}
K - 进制转换
http://acm.hdu.edu.cn/showproblem.php?pid=2031
7 2 23 12 -4 3
111 1B -11
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
char str[16]={'0','1','2','3','4','5','6'
,'7','8','9','A','B','C','D','E','F'};
char ans[1000]={'\0'};
int count=0,i,t=abs(n);
while(t)
{
ans[count++]=str[t%k];
t/=k;
}
if(n<0)
printf("-");
for(i=count-1;i>=0;i--)
{
printf("%c",ans[i]);
}
printf("\n");
}
return 0;
}
L - 杨辉三角
http://acm.hdu.edu.cn/showproblem.php?pid=2032
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
2 3
1 1 1 1 1 1 1 2 1
#include<stdio.h>
int ans[35][35]={0};
void solve()
{
int i,j;
for(i=0;i<=31;i++)
{
for(j=0;j<=i;j++)
{
if(j==i||j==0)
ans[i][j]=1;
else
{
ans[i][j]=ans[i-1][j-1]+ans[i-1][j];
}
}
}
}
int main()
{
int n,i,j;
solve();
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
{
printf(j==i?"%d\n":"%d ",ans[i][j]);
}
}
printf("\n");
}
return 0;
}
M - 人见人爱A+B
http://acm.hdu.edu.cn/showproblem.php?pid=2033
这个题目的A和B不是简单的整数,而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
2 1 2 3 4 5 6 34 45 56 12 23 34
5 7 9 47 9 30
#include<stdio.h>
#include<string.h>
int main()
{
int n,i,t;
int shi1,fen1,miao1,shi2,fen2,miao2;
scanf("%d",&t);
while(t--)
{
scanf("%d %d %d %d %d %d",&shi1,&fen1,&miao1,&shi2,&fen2,&miao2);
int shi=0,fen=0,miao=0;
if(miao1+miao2>=60)
{
miao=(miao1+miao2)%60;
fen+=1;
}
else
{
miao=miao1+miao2;
}
if(fen1+fen2+fen>=60)
{
fen=(fen1+fen2+fen)%60;
shi+=1;
}
else
{
fen=fen1+fen2+fen;
}
shi=shi1+shi2+shi;
printf("%d %d %d\n",shi,fen,miao);
}
return 0;
}
N - 人见人爱A-B
呵呵,很简单吧?
如果n=0并且m=0表示输入的结束,不做处理。
3 3 1 2 3 1 4 7 3 7 2 5 8 2 3 4 5 6 7 8 0 0
2 3 NULL
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m),(n||m))
{
int a[120],b[120],c[120],i,j,count=0;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
c[i]=i;
}
for(i=0;i<m;i++)
{
scanf("%d",&b[i]);
}
sort(a,a+n);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if(a[i]==b[j])
{
c[i]=-1;
count++;
}
}
}
if(count==n)
{
printf("NULL\n");
}
else
{
for(i=0;i<n;i++)
{
if(c[i]!=-1)
{
printf("%d ",a[i]);
}
}
putchar('\n');
}
}
return 0;
}
O - 人见人爱A^B
http://acm.hdu.edu.cn/showproblem.php?pid=2035
说明:A^B的含义是“A的B次方”
2 3 12 6 6789 10000 0 0
8 984 1
#include<stdio.h>
const int mod=1000;
typedef long long ll;
ll qpow(ll a ,ll b)
{
ll ans=1;
while(b)
{
if(b&1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b/=2;
}
return ans;
}
int main()
{
ll n,m;
while(~scanf("%lld%lld",&n,&m),(n||m))
{
printf("%lld\n",qpow(n,m));
}
return 0;
}
P - 改革春风吹满地
http://acm.hdu.edu.cn/showproblem.php?pid=2036
不会AC没关系;
实在不行回老家,
还有一亩三分地。
谢谢!(乐队奏乐)”
话说部分学生心态极好,每天就知道游戏,这次考试如此简单的题目,也是云里雾里,而且,还竟然来这么几句打油诗。
好呀,老师的责任就是帮你解决问题,既然想种田,那就分你一块。
这块田位于浙江省温州市苍南县灵溪镇林家铺子村,多边形形状的一块地,原本是linle 的,现在就准备送给你了。不过,任何事情都没有那么简单,你必须首先告诉我这块地到底有多少面积,如果回答正确才能真正得到这块地。
发愁了吧?就是要让你知道,种地也是需要AC知识的!以后还是好好练吧...
输入数据中所有的整数都在32位整数范围内,n=0表示数据的结束,不做处理。
每个实例的输出占一行。
3 0 0 1 0 0 1 4 1 0 0 1 -1 0 0 -1 0
0.5 2.0
#include<stdio.h>
#include<string.h>
#include<math.h>
typedef struct point{
double x;
double y;
}p;
int n;
double solve(point a[])
{
double s=0;
int i;
for(i=0;i<n;i++)
{
if(i!=n-1)
s+=a[i].x*a[i+1].y-a[i].y*a[i+1].x;
else s+=a[n-1].x*a[0].y-a[n-1].y*a[0].x;
}
return s;
}
int main()
{
while(~scanf("%d",&n),n)
{
p a[150]={0};
for(int i=0;i<n;i++)
{
scanf("%lf%lf",&a[i].x,&a[i].y);
}
printf("%.1lf\n",fabs(solve(a)/2.0));
}
}
Q - 今年暑假不AC
http://acm.hdu.edu.cn/showproblem.php?pid=2037
“是的。”
“那你干什么呢?”
“看世界杯呀,笨蛋!”
“@#$%^&*%...”
确实如此,世界杯来了,球迷的节日也来了,估计很多ACMer也会抛开电脑,奔向电视了。
作为球迷,一定想看尽量多的完整的比赛,当然,作为新时代的好青年,你一定还会看一些其它的节目,比如新闻联播(永远不要忘记关心国家大事)、非常6+7、超级女生,以及王小丫的《开心辞典》等等,假设你已经知道了所有你喜欢看的电视节目的转播时间表,你会合理安排吗?(目标是能看尽量多的完整节目)
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
5
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
int si;
int fi;
}a[150];
bool cmp(node x,node y)
{
return x.fi<y.fi;
}
int main()
{
int n;
while(~scanf("%d",&n),n)
{
int i;
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].si,&a[i].fi);
}
sort(a,a+n,cmp);
struct node p=a[0];
int sum=1;
for(i=1;i<n;i++)
{
if(p.fi<=a[i].si)
{
sum++;
p=a[i];
}
}
printf("%d\n",sum);
}
return 0;
}
R - 三角形
http://acm.hdu.edu.cn/showproblem.php?pid=2039
2 1 2 3 2 2 2
NO YES
#include<stdio.h>
int main()
{
double a,b,c;
int n;
scanf("%d",&n);
while(n--)
{
scanf("%lf%lf%lf",&a,&b,&c);
if(a+b>c)
{
if(b+c>a)
{
if(a+c>b)
{
printf("YES\n");
continue;
}
else
{
printf("NO\n");
continue;
}
}
else
{
printf("NO\n");
continue;
}
}
else
{
printf("NO\n");
continue;
}
}
return 0;
}
S - 亲和数
http://acm.hdu.edu.cn/showproblem.php?pid=2040
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:
1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。人们对这样的数感到很惊奇,并称之为亲和数。一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数
2 220 284 100 200
YES NO
#include<stdio.h>
typedef long long ll;
int main()
{
ll a,b;
int n;
scanf("%d",&n);
while(n--)
{
scanf("%lld%lld",&a,&b);
ll sum1=0,sum2=0,i;
for(i=1;i<a;i++)
{
if(a%i==0)
{
sum1+=i;
}
}
for(i=1;i<b;i++)
{
if(b%i==0)
{
sum2+=i;
}
}
if(sum1==b&&sum2==a)
{
printf("YES\n");
}
else
{
printf("NO\n");
}
}
return 0;
}