HDU 2000 - 2010 【入门】

题目链接: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返回的是实型

#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");
    }
}


有问题可以评论~

发布了71 篇原创文章 · 获赞 89 · 访问量 8548

猜你喜欢

转载自blog.csdn.net/weixin_43890662/article/details/102564906