牛客 NC231656 papaya的传送门

原题链接: 
https://ac.nowcoder.com/acm/problem/231656icon-default.png?t=LA92https://ac.nowcoder.com/acm/problem/231656

题目描述

papayapapayapapaya 今天要去赶飞机,因为他实在是太懒了,所以睡过了头,于是他打算使用他的传送门去双流机场.

我们可以把双流机场当作一个圆心为 (x,y),半径为 R 的圆,papaya 的传送门能且仅能把 papaya传送到离起点距离为 k 的终点.

起点和终点不要求为整数,假设 papaya 一开始在 (0,0),他想知道最少使用多少次传送门能到达机场.


万一 papaya 突然发现其实自己一开始就在双流机场呢?谁知道呢?

输入描述:

第一行一个整数 T(1≤T≤105) 表示测试组数。
对于每组测试,包含四个整数 x,y,R,k均为整数。

输出描述:

对于每组测试,输出一个整数,表示 papaya 使用传送门的最少次数。

示例1

输入

1
7 5 2 3

输出

3

这一题刚拿到手的时候就可以写出大概的代码

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    double x,y,r,k;
    double num;
    int sum;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lf%lf%lf%lf",&x,&y,&r,&k);
        num=sqrt(x*x+y*y)-r;
            if(num<=0)
            printf("0\n");
      else
          {
          sum=ceil(num/k);
          printf("%d\n",sum);
     }
}
}

但是提交上去的时候不对;

此时就少考虑了一种情况

但一开始k就大于sum+R的时候,操作为两次

就产生了一下的代码

#include<stdio.h>
#include<math.h>
int main()
{
    int n;
    double x,y,r,k;
    double num;
    int sum;
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%lf%lf%lf%lf",&x,&y,&r,&k);
        num=sqrt(x*x+y*y)-r;
            if(num<=0)
            printf("0\n");
         else if(k>sqrt(x*x+y*y)+r)
             printf("2\n");
      else
          {
          sum=ceil(num/k);
          printf("%d\n",sum);
     }
}
}

ac

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值