苹果和橙果的Hackerrank问题

时间:2018-11-28 08:33:40

标签: c

问题链接:https://www.hackerrank.com/challenges/apple-and-orange/problem

解决方案:

#include<stdio.h>
int main(void)
{
    long long int 
    s,t,a,b,m,n,i,c1,c2,dal,dar,dol,dor,apples[100000],oranges[100000];
    c1=0;c2=0;
    scanf("%lld%lld%lld%lld%lld%lld",&s,&t,&a,&b,&m,&n);
    for(i=0;i<m;i++)
        scanf("%lld",&apples[i]);
    for(i=0;i<n;i++)
        scanf("%lld",&oranges[i]);
    dar=t-a;dal=s-a;dor=b-t;dol=b-s;
    dor=dor-(2*dor);dol=dol-(2*dol);
    for(i=0;i<m;i++)
    {
        if(apples[i] >= dal && apples[i] <= dar)
        {
            c1++;
        }
        if(oranges[i] <= dor && oranges[i] >= dol )
        {
            c2++;
     }
     printf("%lld\n%lld",c1,c2);
     return 0;
}

某些测试用例无法正常运行... 有人请帮帮我。

1 个答案:

答案 0 :(得分:-1)

这是一个非常基本的入门级编程问题。我觉得您不必要地复杂了。

显然不需要那么多变量。您只需要从用户接受其值的6个变量,苹果和橙子的2个数组,计数变量。您已经使用了很多额外的工具,这增加了复杂性,从而缩小了解决问题的范围。我在最后添加了代码和输出。考虑到您是初学者,我编写了一个非常简单的程序,该程序并未针对性能进行优化。

我将略过您需要遵循的方法:

  1. 接受来自用户的6个值,即s, t, a, b, m, n
  2. 现在接受苹果和橙子的d值。 (分别为苹果和橙子的d值数组)。请记住,这些值分别是分别距苹果树和橙树的距离。请牢记这一点,然后继续下一步。
  3. 现在您有了从相应树上落下的水果的距离,请计算其在地面上的绝对距离,即从0坐标开始。这很简单。只需将该元素的d值,即d[i]添加到ab值,即相应树的位置,即d_apple[i] + ad_orange[i] + b。假设结果为dist
  4. 如果它位于st之间,则增加与该树对应的计数器。

代码:

#include<stdio.h>
int main(void)
{
    long long int s, t, a, b, m, n;
    int c_app = 0, c_orng = 0, i, dist;
    printf("Enter the values in the following order: \n");
    printf("s, t, a, b, m, n\n");
    scanf("%lld%lld%lld%lld%lld%lld", &s, &t, &a, &b, &m, &n);
    long long int d_app[m], d_orng[n];

    //accept the arrays.. these now contain elemenst which represent positions relative to the apple and orange tree repectively
    printf("\nArray for apples:\n");
    for(i = 0; i < m; i++) {
      printf("%d: ", i+1);
      scanf("%lld", &d_app[i]);
    }

    printf("\nArray for oranges:\n");
    for(i = 0; i < n; i++) {
      printf("%d: ", i+1);
      scanf("%lld", &d_orng[i]);
    }
    printf("\n");

    //update the arrays with absolute positions
    for(i = 0; i < m; i++) {
      dist = d_app[i] + a;
      if(dist >= s && dist <= t) {
        c_app++;
      }
    }

    for(i = 0; i < n; i++) {
      dist = d_orng[i] + b;
      if(dist >= s && dist <= t) {
        c_orng++;
      }
    }

    printf("%d\n%d", c_app, c_orng);

}

输出:

Enter the values in the following order: 
s, t, a, b, m, n
 7 10 4 12 3 3

Array for apples:
1:  2
2:  3
3:  -4

Array for oranges:
1:  3
2:  -2
3:  -4

1
2