首页 > 代码库 > first day~

first day~

it‘s been a long time without practicing~ almost everything about the C programming language.

learn today: 1/ read the problem carefully.

                  2/no blank between two input (scanf(“%d %d", &a, &b);

prac: 2001(http://acm.hdu.edu.cn/showproblem.php?pid=2001)

计算两点间的距离

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 95055    Accepted Submission(s): 36510

Problem Description
输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。
 
Input
输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。
 
Output
对于每组输入数据,输出一行,结果保留两位小数。
 
Sample Input
0 0 0 1 0 1 1 0
 
Sample Output
1.00 1.41
 
Author
lcy
 
Source
C语言程序设计练习(一)
 
Recommend
JGShining   |   We have carefully selected several similar problems for you:  2003 2002 2004 2000 2005 
 
 first try: output limit exceeded
 
#include<stdio.h>#include<math.h>int main(){    int x1, y1, x2, y2;    double result;    while(scanf("%d %d %d %d", &x1, &y1, &x2, &y2)!=EOF){        result = sqrt((y2-y1)*(y2-y1)+(x2-x1)*(x2-x1));        printf("%.2f\n", result);    }    return 0;}


why?:题目的输入格式中明确说明了每组测例的输入是4个实数,而不是4个整数。scanf("%d", &n);这样的写法,在输入中有非数字和空格的字符出现时,读入会失败,但不报错,也不会跳过失败处的字符。所以楼主的程序在遇到第一个小数点的时候就一直重复输入最后一次正确读入的测例的结果了,最终造成输入超限。

 

second try: accepted

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