POJ 1940 Polygon Programming with Ease(高斯消元)

Description
给出中点求顶点,顶点个数为奇数
Input
多组输入,每组用例占一行,第一个数为顶点数量,之后2*n个数表示n个中点的坐标,以文件尾结束输入
Output
对于每组用例,输出由给出n个中点组成的多边形的顶点坐标,保留六位小数
Sample Input
5 14 2 20 4 18 12 12 18 10 10
3 -3 5 -2 5 -3 6
3 -2 10 5 10 -1 12
Sample Output
5 10.000000 2.000000 18.000000 2.000000 22.000000 6.000000 14.000000 18.000000 10.000000 18.000000
3 -4.000000 6.000000 -2.000000 4.000000 -2.000000 6.000000
3 -8.000000 12.000000 4.000000 8.000000 6.000000 12.000000
Solution
用高斯消元可以推出第一个顶点坐标,之后递推求出其他点坐标即可
Code

#include<cstdio>
#include<iostream>
double x[1010],y[1010],xx[1010],yy[1010];
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int i;
        double a=0,b=0;//注意初始化 
        for(i=1;i<=n;i++)
            scanf("%lf%lf",&x[i],&y[i]);
        printf("%d",n);//按格式输出 
        for(i=1;i<=n;i++)//用高斯消元求出第一个点的坐标 
        {
            if(i&1)
                a+=x[i],b+=y[i];
            else
                a-=x[i],b-=y[i];
        }
        xx[1]=a;
        yy[1]=b;
        for(i=2;i<=n;i++)//递推求出其他点坐标 
        {
            xx[i]=xx[i-1]+2.0*(x[i-1]-xx[i-1]);
            yy[i]=yy[i-1]+2.0*(y[i-1]-yy[i-1]);
        }
        for(i=1;i<=n;i++)
            printf(" %.6lf %.6lf",xx[i],yy[i]);
        printf("\n");
    }
    return 0;
} 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值