(先刷刷基础),写一写自己的心得,以免日后查缺补漏,每一篇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;
}