2001题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2001
题目分析:这道题要求的是两点之间的距离,在直角坐标系上,两点距离就是两点的横坐标相减的平方然后加上纵坐标相减的平方再开根号。
代码如下:
#include <stdio.h>
#include <math.h>
void main()
{
double x1,x2,y1,y2,m;
while(scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)!=EOF)
{
m=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
printf("%.2f\n",m);
}
}
问题:在写代码的时候由于没看清楚题目,最初的输入格式是
scanf("%lf %lf %lf %lf",&x1,&x2,&y1,&y2)
在编译的时候输入 0 0 0 1的时候是正确的,但是输入0 1 1 0是错的,
改正之后是scanf("%lf %lf %lf %lf",&x1,&y1,&x2,&y2)。
2002题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2002
题目分析:这题求球的体积,公式为,
V=4* π*r³
代码如下:
#include<stdio.h>
#define PI 3.1415927
int main()
{
double r;
while(scanf("%lf",&r)!=EOF)
{
printf("%.3lf\n",4*PI*r*r*r/3);
}
return 0;
}
这题没问题。
2003题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2003
题目分析:这题是输入数据然后求绝对值,我的思路是对大于等于0的数,正常输出。对于小于0的数,就把这个数乘上一个 -1 然后输出。
代码如下:
#include<stdio.h>
int main()
{
double a;
while(scanf("%lf",&a)!=EOF)
{
if(a<0) a=-a;
printf("%.2lf\n",a);
}
return 0;
}
这题没问题。
2004题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2004
题目分析:这题是将分数转换成等级。90~100为A;80~89为B;70~79为C;60~69为D;0~59为E;
大于100和小于0的输出:“Score is error!”。
本题可以用两种方法,一种是switch语句,我用的是if-else if语句。
代码如下:
#include<stdio.h>
int main()
{
int a;
while(scanf("%d",&a)!=EOF)
{
if(a>100 || a<0) printf("Score is error!\n");
else if(a<=100 && a>=90) printf("A\n");
else if(a<90 && a>=80) printf("B\n");
else if(a<=80 && a>=70) printf("C\n");
else if(a<=70 && a>=60) printf("D\n");
else if(a<60) printf("E\n");
}
return 0;
}
这题没问题。
2006题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2006
题目分析:本题求奇数的成绩,奇数的判断就是 i%2==1 。我这题用数组来存放数据。
代码如下:
#include<stdio.h>
int main()
{
int n,i,j,a[100];
while(scanf("%d",&n)!=EOF)//或者~scanf("%d",&n)
{
j=1; //每次输入都要把j置1.
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]%2!=0) j*=a[i];
}
printf("%d\n",j);
}
return 0;
}
这题没问题。
2007题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2007
题目分析:本题求输入所有偶数的平方和以及所有奇数的立方和。
代码如下:
#include<stdio.h>
int main()
{
int m,n,i,t,a,b;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m>n){t=m;m=n;n=t;}//这题要判断m和n的大小,要不然不能通过
a=0,b=0;
for(i=m;i<=n;i++)
{
if(i%2 == 0) a+=i*i;
else b+=i*i*i;
}
printf("%d %d\n",a,b);
}
return 0;
}
2008题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2008
题目分析:统计给定的n个数中,负数、零和正数的个数
代码如下:
#include<stdio.h>
int main()
{
int n,i,j,k,p;
double a[100];
while(scanf("%d",&n)!=EOF)//~scanf("%d",&n)
{
j=k=p=0;
for(i=0;i<n;i++)
{
scanf("%lf",&a[i]);
if(a[i] < 0) j++;
else if(a[i] == 0) k++;
else p++;
}
if(n!=0) printf("%d %d %d\n",j,k,p);
}
return 0;
}
本题的j是统计负数的个数,k是统计0的个数,p是统计正数的个数。
2009题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2009
题目分析:数列的第一项为n,以后各项为前一项的平方根,求数列的前m项的和。要求输出精度保留2位小数。需要用到sqrt函数。
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int m,i,n;
double a[1000],sum;// 用数组行,直接用a也行
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n<10000&&m<1000)
{
a[0]=(double)n;
sum=0.0;// 记得要把这里的sum重置为0
for(i=0;i<m;i++)
{
sum+=a[i];
a[i+1]=sqrt(a[i]);
}
printf("%.2lf\n",sum);
}
}
}
总结:需要改掉平时不做笔记的习惯。由于自己的有些知识点还不是很扎实,导致自己做题效率有点慢,基本上前面几道题基本上要用一到两个小时,因为编译是正确的,但是在上传代码时很难通过。所以导致这周一共做了十几题。现在发现一些规律,学到了:用printf函数一定要配合\n的使用。多次输入时可以用while(scanf()!=EOF)或者while(~scanf())
下周目标:
由于做题慢,增加投入时间,尽量到40题。
看书的一二章和预习第五章的内容。
做完一题就写总结。