首页 > 代码库 > 零基础(伪)HDOJ水题总结【1】

零基础(伪)HDOJ水题总结【1】

首先要解决的是输入输出的问题。作为一个渣渣新手,我用以前学的 C++写了错误代码提交,后果可想而知。

所以认认真真的看了【ACM新手之八大输入输出】,格式记好,在后面运用会越用越熟的。
2000
很easy的一题,首先,现在假设我什么都不会(至少编译器,头文件,基本格式知道)我要解决该怎么办?(以后需要学的和缺少的直接补上,不多说。)
1.比较大小,高中算法讲过。我搜到的【冒泡排序】以后再探讨。
2.但是getchar()的用法,忘了。我只知道用一个东西(…)把字符转化成ASCII码,然后可以排序。

百度了一下,原来如此。

另:getchar()  putchar()  puts()

 

puts(char *p)

printf(char *p,s)

审题:空格!

#include<stdio.h>int main(){    char ch1,ch2,ch3,temp;    while(scanf("%c%c%c",&ch1,&ch2,&ch3)!=EOF)    {        getchar();        if(ch1>ch2)        {          temp=ch1;          ch1=ch2;          ch2=temp;        }         if(ch1>ch3)        {            temp=ch1;            ch1=ch3;            ch3=temp;        }        if(ch2>ch3)        {            temp=ch2;            ch2=ch3;            ch3=temp;        }        printf("%c%2c%2c\n",ch1,ch2,ch3);    }return 0;}

2001
1.第二题竟然狗血的想到了数组(其实没那么麻烦,两个变量罢了)学呗,数组此题的代码不是一般的长啊。本着KISS原则(keep it simple and stupid)。还是用简单方法吧。【数组】回顾get
2.<math.h>与<cmath>
sqrt 和 abs fabs比较常用?库函数使用得当可以提高编码效率。

#include<stdio.h>#include<math.h>int main(){    double x1,y1,x2,y2,dist;    while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF)    {        dist=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));        printf("%.2lf\n",dist);    }    return 0;}

2002
1.#define 宏定义,方便以后的修改。
2.(刚搞懂C语言中没乘方:BASIC是有的。

#include <math.h>double  y=pow(m,n);

 

#define PI 3.1415927#include<stdio.h>int main(){    double a,v;    while(scanf("%lf",&a)!=EOF)    {        v=(4.0/3)*PI*a*a*a;        printf("%.3lf\n",v);    }    return 0;}

2003

1.与其用函数,不如直接来的爽快。

2.double

#include<stdio.h>          int main(){    double a;    while(scanf("%lf",&a)!=EOF)    {        if(a<0) a=(-a);        printf("%.2lf\n",a);    }return 0;}

 

2004

1.switch语句  学习 注意break

#include<stdio.h> int main(){    int a,b;    while(scanf("%d",&a)!=EOF)    {        b=a/10;        if(a<0||a>100)            b=(-1);        switch(b)        {        case 10:        case 9: printf("A\n");break;        case 8: printf("B\n");break;        case 7: printf("C\n");break;        case 6: printf("D\n");break;        case 5:        case 4:        case 3:        case 2:        case 1:        case 0: printf("E\n");break;        case -1:printf("Score is error!\n");break;        default:break;        }    }return 0;}

default:注意

2.但是 冗长剪枝。这是和下一题是一个道理。于是,看的【数组】就用上了。

#include <stdio.h>char r[11]={E,E,E,E,E,E,D,C,B,A,A};int main(){    int s;    while (scanf("%d",&s)!=EOF)        {        if(s>100||s<0)            printf("Score is error!\n");        else            printf("%c\n",r[s/10]);    }    return 0;}

2005

1.直接贴代码,如上

#include <stdio.h>int Month[2][13]={    {0,31,28,31,30,31,30,31,31,30,31,30,31},    {0,31,29,31,30,31,30,31,31,30,31,30,31}};int main(){    int y,m,d,sum,f,i;    while (scanf("%d/%d/%d",&y,&m,&d)!=EOF)        {        sum=0;        f=((y%400==0) || (y%100!=0) && (y%4==0));        i=1;        while (i<m)                sum+=Month[f][i++];        printf("%d\n",sum+d);    }    return 0;}

这里应该是

2006

1.

零基础(伪)HDOJ水题总结【1】