题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=11
废话不多说,开始吧~
HDU 2000
这题就是要注意 读取字符时可能会读到回车,要用getchar() 清除缓存区
//普通写法
#include<stdio.h>
#include<math.h>
int main()
{
char a,b,c;
while(~scanf("%c%c%c",&a,&b,&c)){
getchar();
char max=a>b?a:b;
if(max<c) max=c;
char min=a>b?b:a;
if(min>c) min=c;
printf("%c %c %c\n",min,a+b+c-min-max,max);
}
}
//函数写法
#include<stdio.h>
char max(char a,char b)
{
return a>b?a:b;
}
char min(char a,char b)
{
return a<b?a:b;
}
int main()
{
char a,b,c;
while(~scanf("%c%c%c",&a,&b,&c)){
getchar();
char mini=min(min(a,b),c);
char maxx=max(max(a,b),c);
printf("%c %c %c\n",mini,a+b+c-mini-maxx,maxx);
}
}
HDU 2001
直接上代码吧,没啥好说的,两点求距离的公式记得叭~
不推荐float 会被卡精度
#include<stdio.h>
#include <math.h>
int main()
{
double a,b,c,d;
while(~scanf("%lf%lf%lf%lf",&a,&b,&c,&d)){
printf("%.2lf\n",sqrt((a-c)*(a-c)+(b-d)*(b-d)));
}
return 0;
}
HDU 2002
注意4/3是整除 向下取整即4/3=1 想获得小数应该4.0/3
#include<stdio.h>
#include<math.h>
#define PI 3.1415927
int main()
{
double r;
while(~scanf("%lf",&r)){
printf("%.3lf\n",4.0/3*PI*r*r*r);
}
}
HDU 2003
善于利用math库
#include<stdio.h>
#include<math.h>
int main()
{
double r;
while(~scanf("%lf",&r)){
printf("%.2lf\n",fabs(r));
}
}
HDU 2004
简单的选择结构
#include<stdio.h>
#include<math.h>
int main()
{
int s;
while(~scanf("%d",&s)){
char ans='S';
if(s>=90&&s<=100) ans='A';
else if(s>=80&&s<90) ans='B';
else if(s>=70&&s<80) ans='C';
else if(s>=60&&s<70) ans='D';
else if(s>=0&&s<60) ans='E';
if(ans=='S') printf("Score is error!\n");
else printf("%c\n",ans);
}
}
HDU 2005
注意闰年的特判,不是被4整除就是闰年,什么是闰年具体百度
#include<stdio.h>
#include<math.h>
int main()
{
int y,m,d;
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(~scanf("%d/%d/%d",&y,&m,&d)){
int ans=d;
for(int i=1;i<m;i++) ans+=days[i];
if(m>2&&(y%4==0&&y%100!=0||y%400==0)) ans++;
printf("%d\n",ans);
}
}
HDU 2006
判断k是不是奇数可以用 k&1 位运算更快
#include<stdio.h>
int main()
{
int n;
while(~scanf("%d",&n)){
int ans=1,a;
for(int i=1;i<=n;i++){
scanf("%d",&a);
if(a&1) ans*=a;
}
printf("%d\n",ans);
}
}
HDU 2007
这题特别坑,题目并没有说 l , r 哪个大 故有此操作if(l>r){int t=l; l=r; r=t;}
#include<stdio.h>
#include<math.h>
int main()
{
int l,r;
while(~scanf("%d%d",&l,&r)){
int ans1=0,ans2=0;
if(l>r){int t=l; l=r; r=t;}
for(int i=l;i<=r;i++){
if(i&1) ans2+=i*i*i;
else ans1+=i*i;
}
printf("%d %d\n",ans1,ans2);
}
}
HDU 2008
就是输入的时候判断一下就好 看清题目n==0 break
#include<stdio.h>
#include<math.h>
int main()
{
int n;
while(~scanf("%d",&n)){
if(n==0) break;
int ans1=0,ans2=0,ans3=0;
double a;
while(n--){
scanf("%lf",&a);
if(a>0) ans1++;
else if(a==0) ans2++;
else ans3++;
}
printf("%d %d %d\n",ans3,ans2,ans1);
}
}
HDU 2009
注意sqrt返回的是实型
扫描二维码关注公众号,回复:
9128624 查看本文章
#include<stdio.h>
#include<math.h>
int main()
{
double n;
int m;
while(~scanf("%lf%d",&n,&m)){
double ans=0;
for(int i=1;i<=m;i++){
ans+=n;
n=sqrt(n);
}
printf("%.2lf\n",ans);
}
}
HDU 2010
这题首先要清楚水仙花数一共只有四个,用数组是可以轻易存储的,所以我写了两个版本
用数组和不用数组 感觉用数组反而麻烦了
//用数组的版本
#include<stdio.h>
int main()
{
int n,m;
int f[10];
while(~scanf("%d%d",&n,&m)){
int len=0;
for(int i=n;i<=m;i++){
int a=i%10;
int b=(i%100)/10;
int c=i/100;
// printf("%d %d %d\n",a,b,c);
if(i==a*a*a+b*b*b+c*c*c){
f[++len]=i;
}
}
if(len==0){
printf("no\n");
}
else{
for(int i=1;i<=len;i++){
printf("%d%c",f[i],i==len?'\n':' ');
}
}
}
}
//不用数组的版本
#include<stdio.h>
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
int flag=0;
for(int i=n;i<=m;i++){
int a=i%10;
int b=(i%100)/10;
int c=i/100;
// printf("%d %d %d\n",a,b,c);
if(i==a*a*a+b*b*b+c*c*c){
if(flag) printf(" ");
printf("%d",i);
flag=1;
}
}
if(flag==0) printf("no");
printf("\n");
}
}
有问题可以评论~