1. 程式人生 > >再大的洪水也阻擋不了我們刷題的熱情···(Orz)

再大的洪水也阻擋不了我們刷題的熱情···(Orz)

Solved 16 / 20 A POJ 1005 I Think I Need a Houseboat
Solved 25 / 26 B HDU 2021 發工資咯:)
Solved 22 / 36 C HDU 2022 海選女主角
Solved 18 / 67 D HDU 2023 求平均成績
Solved 16 / 36 E HDU 2024 C語言合法識別符號
Solved 17 / 18 F HDU 2025 查詢最大元素
Solved 17 / 19 G HDU 2026 首字母變大寫
Solved 16 / 31 H HDU 2027 統計母音
Solved 13 / 35 I HDU 2028 Lowest Common Multiple Plus
Solved 16 / 26 J HDU 2029 Palindromes _easy version
Solved 14 / 16 K HDU 2030 漢字統計
Solved 12 / 22 L HDU 2031 進位制轉換
Solved 13 / 27 M HDU 2032 楊輝三角
Solved 16 / 16 N HDU 2033 人見人愛A+B
Solved 10 / 29 O HDU 2034 人見人愛A-B
Solved 14 / 15 P HDU 2035 人見人愛A^B
Solved 9 / 16 Q HDU 2036 改革春風吹滿地
Solved 11 / 12 R HDU 2037 今年暑假不AC
Solved 12 / 23 S HDU 2046 骨牌鋪方格
Solved 14 / 29 T HDU 2039 三角形
Solved 12 / 13 U HDU 2040 親和數
Solved 15 / 16 V HDU 2041 超級樓梯
Solved 13 / 13 W HDU 2042 不容易系列之二
Solved 13 / 21 X HDU 2043 密碼
Solved 13 / 25 Y HDU 2044 一隻小蜜蜂…

1:

描述:Fred Mapper正考慮在路易斯安那州買一些土地來建房子。在調查土地的過程中,他發現
由於密西西比河的腐蝕,路易斯安那州的面積正以每年50平方米的速度減少 。因為Fred想在這個房子度過他的餘生,所以他需要知道他的土地是否將被腐蝕。
經過更多的調查,Fred已經知道了土地將以半圓的形式腐蝕,半圓的中心在座標(0,0)以x軸為分隔線,
x軸以下的區域在水中 ,在第一年開始時沒有被腐蝕的土地。(半圓在下圖中給出)
輸入:在輸入的第一行將有一個正整數(N),表示將有N個數據。在接下去的N行將包含Fred所考慮的土地的X和Y座標。
所給浮點數以米為單位。Y座標為非負的,座標(0,0)不會被給出。
輸出:對於每個資料將對應有一行輸出,格式為 “Property N: This property will begin eroding in year Z.”這裡的N為資料序號(從1開始),Z是將被腐蝕的那一年,且Z是個整數,在輸出最後一行要輸出 “END OF OUTPUT.”
輸入樣例:
2
1.0 1.0
25.0 0.0
輸出樣例:
Property 1: This property will begin eroding in year 1.
Property 2: This property will begin eroding in year 20.
END OF OUTPUT.

#include <stdio.h>
#include <math.h>
int main ()
{
    int n,i,c;
    float a,b;
    while (scanf ("%d",&n)!=EOF)
    {
        for (i=1;i<=n;i++)
        {
            scanf ("%f%f",&a,&b);
            c=(int)(acos (-1)*(a*a+b*b)/100.0);
            printf ("Property %d: This property will begin eroding in year %d
.\n"
,i,c+1); } printf ("END OF OUTPUT.\n"); } return 0; }

2:(DP湊硬幣問題)

作為杭電的老師,最盼望的日子就是每月的8號了,因為這一天是發工資的日子,養家餬口就靠它了,呵呵
但是對於學校財務處的工作人員來說,這一天則是很忙碌的一天,財務處的小胡老師最近就在考慮一個問題:如果每個老師的工資額都知道,最少需要準備多少張人民幣,才能在給每位老師發工資的時候都不用老師找零呢?
這裡假設老師的工資都是正整數,單位元,人民幣一共有100元、50元、10元、5元、2元和1元六種。
Input
輸入資料包含多個測試例項,每個測試例項的第一行是一個整數n(n<100),表示老師的人數,然後是n個老師的工資。
n=0表示輸入的結束,不做處理。
Output
對於每個測試例項輸出一個整數x,表示至少需要準備的人民幣張數。每個輸出佔一行。
Sample Input
3
1 2 3
0
Sample Output
4

#include<stdio.h>
int main()
{
    int n,i,t1,t2,t3,t4,t5,t6,sum;
    int a[100],s[100];
    while(scanf("%d",&n)&&n!=0)
    {
        sum=0;
        for(i=0;i<n;i++)
        {
            t1=0,t2=0,t3=0,t4=0,t5=0,t6=0;
            scanf("%d",&a[i]);
            t1=a[i]/100;
            t2=a[i]%100/50;
            t3=a[i]%50/10;
            t4=a[i]%10/5;
            t5=a[i]%5/2;
            t6=a[i]%5%2;//這裡需要先對5取餘
            s[i]=t1+t2+t3+t4+t5+t6;
            sum+=s[i];
        }
        printf("%d\n",sum);
    }
}

3:(二維陣列+注意絕對值)

面試那天,剛好來了m*n個MM,站成一個m*n的佇列,副導演Fe(OH)2為每個MM打了分數,分數都是32位有符號整數。
一開始我很納悶:分數怎麼還有負的?Fe(OH)2解釋說,根據選拔規則,頭髮染成黃色、化妝太濃、穿的太少等等都要扣分數的,扣的多了就可能是負分了,當然,如果發現話語中夾有日語,就直接給-2147483648分了。
分數送上來了,是我做決定的時候了,我的一個選拔原則是,要選一個面試分數絕對值(必須還是32位整數)最大的MM。
特別說明:如果不幸選中一個負分的MM,也沒關係,因為我覺得,如果不能吸引你,那要想法噁心你。
Input
輸入資料有多組,每組的第一行是兩個整數m和n,表示應聘MM的總共的行列數,然後是m行整數,每行有n個,m和n的定義見題目的描述。
Output
對於每組輸入資料,輸出三個整數x,y和s,分別表示選中的MM的行號、列號和分數。
note:行號和列號從一開始,如果有多個MM的分數絕對值一樣,那麼輸出排在最前面的一個(即行號最小的那個,如果行號相同則取列號最小的那個)。
Sample Input
2 3
1 4 -3
-7 3 0
Sample Output
2 1 -7

#include<stdio.h> 
#include<math.h>
int main()
{
    int a[100][100];
    int i,j,n,k,b,f1,f2;
    while(~scanf("%d%d",&k,&b))
    {
        for(i=1;i<=k;i++)
         for(j=1;j<=b;j++)
         {
            scanf("%d",&a[i][j]);
         }
         f1=1;f2=1;
         for(i=1;i<=k;i++)
          for(j=1;j<=b;j++)
          {
            if(fabs(a[i][j])>fabs(a[f1][f2]))
            {
                f1=i;
                f2=j;
              }
          }
          printf("%d %d %d\n",f1,f2,a[f1][f2]); 
    }
    return 0;
}

4(注意輸出格式):

假設一個班有n(n<=50)個學生,每人考m(m<=5)門課,求每個學生的平均成績和每門課的平均成績,並輸出各科成績均大於等於平均成績的學生數量。
Input
輸入資料有多個測試例項,每個測試例項的第一行包括兩個整數n和m,分別表示學生數和課程數。然後是n行資料,每行包括m個整數(即:考試分數)。
Output
對於每個測試例項,輸出3行資料,第一行包含n個數據,表示n個學生的平均成績,結果保留兩位小數;第二行包含m個數據,表示m門課的平均成績,結果保留兩位小數;第三行是一個整數,表示該班級中各科成績均大於等於平均成績的學生數量。
每個測試例項後面跟一個空行。
Sample Input
2 2
5 10
10 20
Sample Output
7.50 15.00
7.50 15.00
1

#include<stdio.h>
int main()
{
    int n,m,num,i,j,f;
    double a[55][10],S,C,aS[55],aC[10];
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
            {
                scanf("%lf",&a[i][j]);
            }
        }
        for(i=0;i<n;i++)
        {
            S=0;
            for(j=0;j<m;j++)
            {
                S+=a[i][j];
            }
            aS[i]=S/m;
        }
        for(i=0;i<m;i++)
        {
            S=0;
            for(j=0;j<n;j++)
            {
                S+=a[j][i];
            }
            aC[i]=S/n;
        }
        num=0;
        for(i=0;i<n;i++)
        {
            f=0;
            for(j=0;j<m;j++)
            {
                if(a[i][j]>=aC[j])
                {
                    f++;
                }
            }
            if(m==f)
            {
                num++;
            }
        }
        for(i=0;i<n;i++)
        {
            if(i==n-1)
            printf("%.2lf\n",aS[i]);
            else
            printf("%.2lf ",aS[i]);
        }
        for(i=0;i<m;i++)
        {
            if(i==m-1)
            printf("%.2lf\n",aC[i]);
            else
            printf("%.2lf ",aC[i]);
        }
         printf("%d\n\n",num);
    }
    return 0;
 } 

5:

輸入一個字串,判斷其是否是C的合法識別符號。
Input
輸入資料包含多個測試例項,資料的第一行是一個整數n,表示測試例項的個數,然後是n行輸入資料,每行是一個長度不超過50的字串。
Output
對於每組輸入資料,輸出一行。如果輸入資料是C的合法識別符號,則輸出”yes”,否則,輸出“no”。
Sample Input
3
12ajf
fi8x_a
ff ai_2
Sample Output
no
yes
no

#include<stdio.h>
#include<string.h>
int main()
{
    int n,t;
    char str[55];
    while(scanf("%d",&n)!=EOF)
    {   getchar();
        while(n--)
        {
            gets(str);
            t=0;
                for(int i=0;i<strlen(str);i++)
                {
                    if((str[0]>='a'&&str[0]<='z')||(str[0]>='A'&&str[0]<='Z')||(str[0]=='_'))
                    {
                        if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')||(str[i]=='_')||(str[i]>='0'&&str[i]<='9'))
                        t++;
                    }
                }
                if(t==strlen(str)) //
               printf("yes\n");
             else 
               printf("no\n");
        }

    }
return 0;
}

6:

對於輸入的每個字串,查詢其中的最大字母,在該字母后面插入字串“(max)”。
Input
輸入資料包括多個測試例項,每個例項由一行長度不超過100的字串組成,字串僅由大小寫字母構成。
Output
對於每個測試例項輸出一行字串,輸出的結果是插入字串“(max)”後的結果,如果存在多個最大的字母,就在每一個最大字母后面都插入”(max)”。
Sample Input
abcdefgfedcba
xxxxx
Sample Output
abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)

#include <stdio.h>
#include <string.h>
int main()
{
   char str[105],m;
   while(scanf("%s",str)!=EOF)
      {
         m=str[0];
         for(int i=1;i<strlen(str);i++)
            {
               if(str[i]>m)
                  m=str[i];  
            }
         for(int i=0;str[i];i++)
            {
               printf("%c",str[i]);
               if(str[i]==m)
                  printf("(max)");  
            }
         printf("\n");
      }
   return 0;   
}

7:

輸入一個英文句子,將每個單詞的第一個字母改成大寫字母。
Input
輸入資料包含多個測試例項,每個測試例項是一個長度不超過100的英文句子,佔一行。
Output
請輸出按照要求改寫後的英文句子。
Sample Input
i like acm
i want to get an accepted
Sample Output
I Like Acm
I Want To Get An Accepted

#include <stdio.h>
#include <string.h>
int main()
{
    char s[105];
    int flag;
   while(gets(s))
   {
    flag=0;
       for(int i=0;i<strlen(s);i++)
       {
            if(s[0]>='a'&&s[0]<='z')
            s[0]=s[0]-32;
            if(s[i]==' ')
            s[i+1]=s[i+1]-32;
        } 
        for(int i=0;i<strlen(s);i++)
        printf("%c",s[i]);
        printf("\n");
   }
   return 0;   
}

8:(又是統計啥啥的,水)

9:(n個數最小公倍數)

#include<stdio.h>
long long gcd(long long a,long long b)//相乘用long long,做乘法的時候要考慮爆資料的情況!
    {
        return b?gcd(b,a%b):a;
    }
int main()
{
    int n,i;
    long long a,b;
    while(scanf("%d",&n)!=EOF)
    {
        a=1;
        for(i=0;i<n;i++)
        {
            scanf("%d",&b);
            a=a*b/gcd(b,a);
        }
        printf("%d\n",a);
    }

    return 0;
 } 

10:(判斷迴文串)

#include<stdio.h>
#include<string.h>
int main()
{
    char s[1000];//陣列開大一點
    int n;
    int flag,i,j;
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
            flag=0;
            scanf("%s",s);
            int l=strlen(s);

                for(i = 0;i < l; i++)
            {
                if(s[i]==s[l-i-1])
                flag=1;
                else
                {
                    flag=0;
                    break;
                }
            }
            if(flag)
            printf("yes\n");
            else 
            printf("no\n");
       }
}
    return 0;
}
///漢字統計
#include<stdio.h>  
#include<string.h>  
char s[1005];  
int main()  
{  
    int n,l,i,j,count;  
    while(scanf("%d",&n)!=EOF)  
    {  
        getchar();  
        while(n--)  
        {  
            gets(s);  
            l=strlen(s);  
            count=0;  
            for(i=0;i<l;i++)  
            {  
                if(s[i]<0)
                    count++;  
            }  
            printf("%d\n",count/2);
        }  
    }  
    return 0;  
} 
//進位制轉換
#include <stdio.h>  
int main()  
{  
    int n,r,i,x,flag;  
    int a[1005];  
    while (scanf("%d %d",&n,&r)!=EOF)  
    {  
        flag=0;  
        if (n<0)  
        {  
            n=-n;  
            flag=1;  
        }  
        x=0;  
        while (n)  
        {  
            a[x]=n%r;  
            n/=r;  
            x++;  
        }  
        while (x--)  
        {  
            if (flag)  
            {  
                printf("-");  
                flag=0;  
            }  
            if (a[x]<10)  
            printf("%d",a[x]);  
            else 
            printf("%c",55+a[x]);  
        }  
        printf("\n");  
    }  
    return 0;  
}