题目来源: http://www.vijos.cn/Problem_Show.asp?id=1007 /* Name:绕钉子的长绳子 Author:Dualeak Blog:http://blog.youkuaiyun.com/dualeak Date:2009-10-31 Description: 平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形. 现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计,求出绳子的长度. Input: 第1行两个数:整数N(1<=N<=100)和实数R. 接下来N行按逆时针顺序给出N个钉子中心的坐标 . 坐标的绝对值不超过100. Output: 一个数,绳子的长度,精确到小数点后2位. */ #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void) { int N, i=0, j=0; float R, S, x, y; scanf("%d%f", &N, &R); //printf("%d %f/n", N, R); float **poi; poi=(float **)malloc(N*sizeof(float *)); for(i=0;i<N;i++) poi[i]=(float *)malloc(sizeof(*poi)); for(i=0; i<N; i++) for(j=0; j<2; j++) scanf("%f", &poi[i][j]); S = 2*R*3.14159; for(i=0; i<N; i++){ if(N-1 == i) j=0; else j=i+1; x = poi[j][0]-poi[i][0]; y = poi[j][1]-poi[i][1]; S += (float)sqrt( x*x + y*y ); } printf("%.2f/n", S); free(poi); return 0; }