再大的洪水也阻擋不了我們刷題的熱情···(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;
}