杭电入门100题适合新手看一看(1-5)

(先刷刷基础),写一写自己的心得,以免日后查缺补漏,每一篇5道题。附上知识点补充
AC的路上很艰难,不可能一蹴而就,特别是wa了很多遍的时候,我们挑战自己,磨练自己,做自己害怕的事情,让自己变得更强大。这是acm要学的东西,也是我坚持的原因。(菜鸟一枚,渴望有一天能够证明自己,加油加油!)
话不多说,开始上题,入门100题可能比较简单,数据范围比较小,暴力就能做出来,但是还是会考察很多知识点,是打好基础的重要一步。
HDU2000:ASCII码排序
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2000
要求:`输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。

Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
 

Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
 

Sample Input
qwe
asd
zxc
 

Sample Output
e q w
a d s
c x z

首先看清题意,输出格式一定要符合题目要求,oj不是人,很刻板的注重格式。该有空格就有空格,该大写就大写

//注意!!getchar吞掉回车,和比较大小的次序
#include 
#include
using namespace std;
int main(int argc, const char * argv[]) {
    char a,b,c;
    while(scanf("%c%c%c",&a,&b,&c)!=EOF)
    {
       getchar();//吞掉回车,通常情况下,在用scanf的时候,后面输入字符串要用getchar()吞掉回车键
        char t;
        if(a>b){
            t=a;
            a=b;
            b=t;
        }
        if(a>c){
            t=a;
            a=c;
            c=t;}
        if(b>c){
            t=b;
            b=c;
            c=t;
        }
         printf("%c %c %c\n",a,b,c);
    }
    return 0;
}

HDU2001 计算两点间的距离
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2001
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
对于每组输入数据,输出一行,结果保留两位小数。

#include 
#include
#include
using namespace std;
int main(){
    double x1,x2,y1,y2;
    while(scanf("%lf%lf%lf%lf",&x1,&x2,&y1,&y2)!=EOF){
        double dis;
        dis=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
        printf("%.2lf\n",dis);//格式!!很重要   
    }
    return 0;
}

hdu2002 计算球体积
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2002

根据输入的半径值,计算球的体积。

Input
输入数据有多组,每组占一行,每行包括一个实数,表示球的半径。

Output
输出对应的球的体积,对于每组输入数据,输出一行,计算结果保留三位小数。

#include 
#include
#include
using namespace std;
const double pi=3.1415927;
int main(){
    double r,v;
    while(scanf("%lf",&r)!=EOF){
        v=4.0/3*pi*r*r*r;//这个时候不能是4/3,因为整数除法会损耗,新手容易犯的地方
        printf("%.3lf\n",v);
    }
    return 0;
}

hdu2004 成绩转换
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2004
这里主要是if else语句的应用。要熟悉if语句

#include 
#include
#include
using namespace std;
int main(){
    int t;
    while(scanf("%d",&t)!=EOF){
        if(t<100&&t>90)printf("A\n");
        else if(t<90&&t>80)printf("B\n");
        else if(t<80&&t>70)printf("C\n");
        else if(t<70&&t>60)printf("D\n");
        else if(t<60&&t>=0)printf("E\n");
        else printf("Score is error!\n");
    }
    return 0;
}

hdu2005 第几天?
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=2005
1.输入格式。可以直接在scanf()里面写成“YYYY/MM/DD”格式,这样读取的时候会自动过滤掉那些斜杠。而不用以字符串输入,再以斜杠为标志转换为数字。

2.需要判断该年是否为闰年。若为闰年,则二月有29天,否则二月有28天。本代码的写法是把每月的天数都事先存在day[]数组里,由于二月天数不确定,所以先判断是否为闰年,然后再给二月天数赋值。

//这里已经有了一点暴力枚举的意思了,把所有的可能情况枚举出来
#include
#include
#include
#include
#include
#include
#include
#include
typedef long long LL;
using namespace std;
 
int main()
{
	int y,m,d;
	while(~scanf("%d/%d/%d",&y,&m,&d))
	{
		int k,leap;
 		int day[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}
	 };
	 leap=(y%4==0&&y%100!=0||y%400==0);
	 for(k=1;k<m;k++)
	 {
	 	  d=d+day[leap][k];
	 }
	 printf("%d\n",d);
 
	}
 
	return 0;
 
}

你可能感兴趣的:(HDU100道入门)