HDU 2031 - 2040 【入门】

题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=11

继续加油~


HDU 2031

进制转换会吧,C语言一开始就会学的

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int a,b;
    int f[40];
    while(~scanf("%d%d",&a,&b)){
        int len=0;
        if(a<0){
            printf("-");
            a=-a;
        }
        while(a){
            f[++len]=a%b;
            a/=b;
        }
        for(int i=len;i>=1;i--){
            if(f[i]<10) printf("%d",f[i]);
            else printf("%c",f[i]-10+'A');
        }
        printf("\n");
    }
}


HDU 2032

简单的递推。这种题目可以在输入前全部预处理出来,不然每次询问的时候算一遍会浪费不必要的时间

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int f[40][40]={0};
    for(int i=1;i<=30;i++){
        f[i][1]=1;
        f[i][i]=1;
    }
    for(int i=2;i<=30;i++){
        for(int j=2;j<i;j++){
            f[i][j]=f[i-1][j]+f[i-1][j-1];
        }
    }
    int n;
    while(~scanf("%d",&n)){
        for(int i=1;i<=n;i++){
            for(int j=1;j<=i;j++){
                printf("%d%c",f[i][j],j==i?'\n':' ');
            }
        }
        printf("\n");
    }
}


HDU 2033

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int a,b,c,x,y,z;
    int t;
    while(~scanf("%d",&t)){
        while(t--){
            scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z);
            c+=z;
            if(c>=60){
                c-=60;
                b++;
            }
            b+=y;
            if(b>=60){
                b-=60;
                a++;
            }
            a+=x;
            printf("%d %d %d\n",a,b,c);
        }
    }
}


HDU 2034

最后要留空格,搞不懂杭电哦,不过看题真的很重要哇 233

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n,m;
    int a[105],b[105];
    int c[105];
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0) break;
        for(int i=1;i<=n;i++) scanf("%d",a+i);
        for(int i=1;i<=m;i++) scanf("%d",b+i);
        int len=0;
        for(int i=1;i<=n;i++){
            int flag=1;
            for(int j=1;j<=m;j++){
                if(a[i]==b[j]){
                    flag=0;
                    break;
                }
            }
            if(flag) c[++len]=a[i];
        }
        if(len==0){
            printf("NULL\n");
        }
        else{
            for(int i=1;i<=len;i++){
                for(int j=1;j<=len-i;j++){
                    if(c[j]>c[j+1]){
                        int t=c[j];
                        c[j]=c[j+1];
                        c[j+1]=t;
                    }
                }
            }
            for(int i=1;i<=len;i++){
                printf("%d ",c[i]);
            }
            printf("\n");
        }
    }
}


HDU 2035

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        if(!n&&!m) break;
        int ans=1;
        for(int i=1;i<=m;i++){
            ans=(ans*n)%1000;
        }
        printf("%d\n",ans);
    }
}


HDU 2036

这题居然我都不会写… 不过搜了一下还是看懂了的,这题有个公式的。
公式的具体证明看大佬博客(用了一点高数下册的知识)
https://blog.csdn.net/hemmingway/article/details/7814494

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n;
    int x[105],y[105];
    while(~scanf("%d",&n)&&n){
        for(int i=1;i<=n;i++){
            scanf("%d%d",x+i,y+i);
        }
        x[n+1]=x[1]; y[n+1]=y[1];
        double ans=0;
        for(int i=1;i<=n;i++){
            ans+=(x[i]*y[i+1]-x[i+1]*y[i]);
        }
        printf("%.1lf\n",ans/2);
    }
}


HDU 2037

贪心,先排个序(让结束时间越早的排在越前),这样我们每次都选结束时间尽量早的,那么后面那一大段时间剩下的就越多,选的肯定也越多,这就是贪心。写C语言的排序感觉好不爽

#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 105
struct node
{
    int l,r;
}f[maxn],t;
int main()
{
    int n;
    while(~scanf("%d",&n)&&n){
        for(int i=1;i<=n;i++){
            scanf("%d%d",&f[i].l,&f[i].r);
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n-i;j++){
                if(f[j].r>f[j+1].r){
                    t=f[j];
                    f[j]=f[j+1];
                    f[j+1]=t;
                }
                else if(f[j].r==f[j+1].r){
                    if(f[j].l>f[j+1].l){
                        t=f[j];
                        f[j]=f[j+1];
                        f[j+1]=t;
                    }
                }
            }
        }
        int ans=0,tmp=0;
        for(int i=1;i<=n;i++){
            if(tmp<=f[i].l){
                ans++;
                tmp=f[i].r;
            }
        }
        printf("%d\n",ans);
    }
}


HDU 2038

???没有2038…


HDU 2039

这里还是坑,说的是正数不是整数,不要被样例欺骗的,要用double

#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 105
int main()
{
    int n;
    scanf("%d",&n);
    while(n--){
        double a,b,c;
        scanf("%lf%lf%lf",&a,&b,&c);
        if(a+b>c&&a+c>b&&b+c>a) printf("YES\n");
        else printf("NO\n");
    }
}


HDU 2040

扫描二维码关注公众号,回复: 9128613 查看本文章
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 105
int hhh(int b)
{
    int sum=1;
    for(int i=2;i<=sqrt(b);i++){
        if(b%i==0){
            sum+=i;
            if(i!=sqrt(b)) sum+=b/i;
        }
    }

    return sum;
}
int main()
{
    int n;
    scanf("%d",&n);
    while(n--){
        int a,b;
        scanf("%d%d",&a,&b);
        if(hhh(b)==a&&hhh(a)==b) printf("YES\n");
        else printf("NO\n");
    }
}


我弃坑了?

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

猜你喜欢

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