无限的路(C语言)

这个题分为几部分

1、首先建立一个函数两点之间的距离

2、之后再建立一个函数计算到原点的距离

3、最终在主函数中只需要实现两点到原点距离相减

可以利用递推做

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
double dp[300][300];
//利用二维数组建立一个类似与图中的坐标图
double long(int a, int b, int c, int d) 
{
    return 1.000 * sqrt(pow((a - b), 2) + pow((c - d), 2));
}
//此函数负责运算的是二者之间的直线距离
void init() 
{
    int j = 1;
    dp[0][0] = 0;
    while (j <= 201) 
    {
        int i = 0;
        int t = j;
        while (i <= j) 
        {
            if (i == 0)
            {
                dp[0][t] = fabs(dp[t - 1][0] + long(0, t - 1, t, 0));
            }
            else
            {
                dp[i][t] = fabs(dp[i - 1][t + 1] + sqrt(2)); 
            }
            i++;
            t--;
        }
        j++;
    }
}
int main()
{
    init();
    int n;
    scanf("%d", &n);
    while (n--) 
    {
        int a, b, x, y;
        scanf("%d %d %d %d", &a, &b, &x, &y);
        printf("%.3lf\n", fabs(dp[x][y] - dp[a][b]));
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值