題目鏈接: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;
}
加油~ 同志仍需努力~