HDU 2021 - 2030【入門】

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

沖沖衝!


HDU 2021

有一點貪心的感覺,就是儘量選擇人民幣面值大的,這樣就可以保證使用的人民幣數量最少

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    int f[]={0,100,50,10,5,2,1};
    while(~scanf("%d",&n)&&n){
        int ans=0,a;
        while(n--){
            a=read();
            for(int i=1;i<=6;i++){
                ans+=a/f[i];
                a%=f[i];
            }
        }
        printf("%d\n",ans);
    }
    return 0;
}


HDU 2022

注意這裏x y初始化爲1的原因,如果n=m=1 並且唯一的一個人是0分,那麼我這代碼不初始化就是錯的(但是杭電沒有這個測試點,照樣AC)

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)){
        int x=1,y=1,a,p=0;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                a=read();
                if(abs(p)<abs(a)){
                    x=i;
                    y=j;
                    p=a;
                }
            }
        }
        printf("%d %d %d\n",x,y,p);
    }
    return 0;
}


HDU 2023

對數組的初等掌握,注意看清題目,每個樣例要額外輸出一個空行,不然PE歡迎你~

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n,m;
    int f[55][10];
    double ave[6];
    while(~scanf("%d%d",&n,&m)){
        memset(f,0,sizeof f);
        memset(ave,0,sizeof ave);
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                f[i][j]=read();
                f[i][8]+=f[i][j];
                ave[j]+=f[i][j];
            }
        }
        for(int i=1;i<=n;i++){
            printf("%.2lf%c",f[i][8]*1.0/m,i==n?'\n':' ');
        }
        for(int i=1;i<=m;i++){
            printf("%.2lf%c",ave[i]*=1.0/n,i==m?'\n':' ');
        }
        int ans=0;
        for(int i=1;i<=n;i++){
            int flag=1;
            for(int j=1;j<=m;j++){
                if(f[i][j]<ave[j]){
                    flag=0;
                    break;
                }
            }
            if(flag) ans++;
        }
        printf("%d\n\n",ans);
    }
    return 0;
}


HDU 2024

這題出的還是有點問題的,關鍵字不是合法表示符吧?這裏沒有考慮

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    char s[100];
    while(~scanf("%d",&n)){
        getchar();
        while(n--){
            gets(s);
            int flag=1,len=strlen(s);
            if((s[0]<'a'||s[0]>'z')&&(s[0]<'A'||s[0]>'Z')&&s[0]!='_'){
                flag=0;
            }
            else{
                for(int i=1;i<len;i++){
                    if((s[i]<'a'||s[i]>'z')&&(s[i]<'A'||s[i]>'Z')&&s[i]!='_'&&(s[i]<'0'||s[i]>'9')){
                        flag=0;
                        break;
                    }
                }
            }
            printf("%s\n",flag?"yes":"no");
        }

    }
    return 0;
}


HDU 2025

實際要插入的話,還是有一丟丟小麻煩的,但是根本不需要嘛~

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    char s[100];
    while(~scanf("%s",s)){
        int len=strlen(s);
        char m=0;
        for(int i=0;i<len;i++){
            if(m<s[i]) m=s[i];
        }
        for(int i=0;i<len;i++){
            printf("%c",s[i]);
            if(s[i]==m) printf("(max)");
        }
        printf("\n");
    }
    return 0;
}


HDU 2026

這題學會找規律,每個單詞之間會有空格,通過這個來標記就好辦了

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    char s[105];
    while(gets(s)){
        int len=strlen(s);
        int flag=1;
        for(int i=0;i<len;i++){
            if(flag){
                if(s[i]>='a'&&s[i]<='z'){
                    s[i]+='A'-'a';
                }
                flag=0;
            }
            if(s[i]==' ') flag=1;
        }
        printf("%s\n",s);
    }
    return 0;
}


HDU 2027

還是看題的問題,不然PE,其他問題不大

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    char s[105];
    int ans[6];
    char c[7]={' ','a','e','i','o','u'};
    while(~scanf("%d",&n)){
        getchar();
        while(n--){
            memset(ans,0,sizeof ans);
            gets(s);
            int len=strlen(s);
            for(int i=0;i<len;i++){
                if(s[i]=='a') ans[1]++;
                else if(s[i]=='e') ans[2]++;
                else if(s[i]=='i') ans[3]++;
                else if(s[i]=='o') ans[4]++;
                else if(s[i]=='u') ans[5]++;
            }
            for(int i=1;i<=5;i++){
                printf("%c:%d\n",c[i],ans[i]);
            }
            if(n>0) printf("\n");
        }
    }
    return 0;
}


HDU 2028

這題究極坑,雖然我一開始意識到了中間可能會超過32位,但是我以爲long long可以倖免,沒想到是這種操作…令人窒息的操作

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int gcd(int x,int y)
{
    return y==0?x:gcd(y,x%y);
}
int main()
{
    int n;
    while(~scanf("%d",&n)){
        int ans=read();
        if(n==1){ printf("%d\n",ans); continue;}
        while(--n){
            int t=read();
            ans=ans/gcd(ans,t)*t;
        }
        printf("%d\n",ans);
    }
    return 0;
}


HDU 2029

簡單粗暴的方法

#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    char s[105];
    while(~scanf("%d",&n)){
        getchar();
        while(n--){
            gets(s);
            int len=strlen(s);
//            printf("%s\n",s);
            int flag=1;
            for(int i=0;i<len/2;i++){
                if(s[i]!=s[len-i-1]){
                    flag=0;
                    break;
                }
            }
            printf("%s\n",flag?"yes":"no");
        }
    }
    return 0;
}


HDU 2030

這題跟漢字機內碼有關,漢字在計算機中如何表示呢?一個漢字佔兩個字符,且每個字符的最高位爲1,也就是說如果這兩個字符表示的整型數爲負數。我們就可以統計爲負數的字符數量,答案除二即可~ 另外這題字符數組大小開100不夠,要開1000.或者我提供了另一種寫法不需要考慮數組大小,可以參考一下~

//用了數組的
#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
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((int)s[i]<0){
                    ans++;
                }
            }
            printf("%d\n",ans>>1);
        }
    }
    return 0;
}

//不用數組
#include<stdio.h>
#include<math.h>
int read()
{
    char c;
    int x=1;
    while((c=getchar())<'0'||c>'9') if(c=='-') x=-1;
    int res=c-'0';
    while((c=getchar())>='0'&&c<='9') res=res*10+c-'0';
    return x*res;
}
int main()
{
    int n;
    while(~scanf("%d",&n)){
        getchar();
        while(n--){
            int ans=0;
            char c;
            while((c=getchar())!='\n'){
                if((int)c<0){
                    ans++;
                }
            }
            printf("%d\n",ans>>1);
        }
    }
    return 0;
}


加油~ 同志仍需努力~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章