HDU 2011 - 2020 【入门】

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

话不多说,冲!


HDU 2011

前面的老问题,别搞成整除了

#include<stdio.h>
#include<math.h>
int main()
{
    int n,m;
    scanf("%d",&m);
    while(m--){
        scanf("%d",&n);
        double ans=0;
        for(int i=1;i<=n;i++){
            if(i&1) ans+=1.0/i;
            else ans-=1.0/i;
        }
        printf("%.2lf\n",ans);
    }
    return 0;
}

HDU 2012

典型的标记变量,以及素数的判定
如何判定k是不是素数呢? 就是找它能不能被[ 2 , sqrt(k) ] 中的任意一个整数整除 ,至于为什么不是[ 2 , k ]可以好好想想

#include<stdio.h>
#include<math.h>
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        if(m==0&&n==0) break;
        int  flag=1;
        for(int i=n+1;i<m;i++){
            int now=i*i+i+41;
            for(int j=2;j<=sqrt(now);j++){
                if(now%j==0){
                    flag=0;
                    break;
                }
            }
        }
        printf("%s\n",flag?"OK":"Sorry");
    }
    return 0;
}

HDU 2013

比较简单的递推,应该自己推出来没问题
有点小技巧 整型乘2 可以用左移<<

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    while(~scanf("%d",&n)){
        int ans=1;
        for(int i=1;i<n;i++){
            ans=(ans+1)<<1;
        }
        printf("%d\n",ans);
    }
    return 0;
}


HDU 2014

思路简单,找到最高最低分数并记录总分,最后的平均分就是 (总分-最高-最低) / (n-2)

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    while(~scanf("%d",&n)){
        int sum=0,min=0x7fffffff,max=0;
        int a;
        for(int i=1;i<=n;i++){
            scanf("%d",&a);
            sum+=a;
            if(min>a) min=a;
            if(max<a) max=a;
        }
        printf("%.2lf\n",(sum-min-max)*1.0/(n-2));
    }
    return 0;
}


HDU 2015

这题作为入门题有点小小的麻烦,我是把它保存在数组里面,然后固定套路输出,可以少考虑一些因素。
这里可以推出一些关系,读者自己推~

#include<stdio.h>
#include<math.h>
int main()
{
    int n,m;
    int ans[105];
    while(~scanf("%d%d",&n,&m)){
        int len=n/m,q=n%m;
        for(int i=1;i<=len;i++){
            ans[i]=(m+1)+2*(i-1)*m;
        }
        if(q){
            int sum=0;
            for(int i=len*m+1;i<=n;i++){
                sum+=i*2;
            }
            ans[++len]=sum/q;
        }
        for(int i=1;i<=len;i++){
            printf("%d%c",ans[i],i==len?'\n':' ');
        }
    }
    return 0;
}


HDU 2016

这题描述的明显有bug,不知道是不是我语文不好?如果有多个最小值怎么办?其实这题不用考虑多个最小值的情况, 但是这题描述确实有bug,需要注意。

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    int f[105];
    while(~scanf("%d",&n)&&n){
        int min=0x7fffffff,x=-1;
        for(int i=1;i<=n;i++){
            scanf("%d",&f[i]);
            if(min>f[i]){
                min=f[i];
                x=i;
            }
        }
        int t=f[1];
        f[1]=f[x];
        f[x]=t;
        for(int i=1;i<=n;i++){
            printf("%d%c",f[i],i==n?'\n':' ');
        }
    }
    return 0;
}


HDU 2017

还是注意getchar

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n;
    char s[1005];
    while(~scanf("%d",&n)){
        getchar();
        while(n--){
            gets(s);
            int len=strlen(s);
            int ans=0;
            for(int i=0;i<len;i++){
                if(s[i]>='0'&&s[i]<='9') ans++;
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}


HDU 2018

简单的递推,题目还是没有说清楚,但是可以从样例看出 母牛第二年年初才开始生
可以得到类似于斐波拉契的式子
f[i]=f[i-1]+f[i-3];

#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n;
    int f[60];
    f[1]=1; f[2]=2; f[3]=3; f[4]=4;
    for(int i=5;i<=55;i++){
        f[i]=f[i-1]+f[i-3];
    }
    while(~scanf("%d",&n)&&n){
        printf("%d\n",f[n]);
    }
    return 0;
}


HDU 2019

这题本来可以按平常的思维直接整体后移(第一种代码)我还写了一种奇怪的边输入边插入的(第二种代码),量力而看~

//普通版
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n,m;
    int f[105];
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0) break;
        for(int i=1;i<=n;i++){
            scanf("%d",&f[i]);
        }
        int x=n+1;
        for(int i=1;i<=n;i++){
            if(f[i]>=m){
                x=i;
                break;
            }
        }
        for(int i=n;i>=x;i--){
            f[i+1]=f[i];
        }
        f[x]=m;
        for(int i=1;i<=n+1;i++)
            printf("%d%c",f[i],i==n+1?'\n':' ');
    }
    return 0;
}

//奇怪的
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
    int n,m;
    int f[105];
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0) break;
        int len=0,x;
        int flag=1;
        while(n--){
            scanf("%d",&x);
            if(flag&&x>=m){
                flag=0;
                f[++len]=m;
            }
            f[++len]=x;
        }
        if(flag) f[++len]=m;
        for(int i=1;i<=len;i++)
            printf("%d%c",f[i],i==len?'\n':' ');
    }
    return 0;
}


HDU 2020

简单的冒泡排序

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


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

猜你喜欢

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