问题链接: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;
}
某些测试用例无法正常运行... 有人请帮帮我。
答案 0 :(得分:-1)
这是一个非常基本的入门级编程问题。我觉得您不必要地复杂了。
显然不需要那么多变量。您只需要从用户接受其值的6个变量,苹果和橙子的2个数组,计数变量。您已经使用了很多额外的工具,这增加了复杂性,从而缩小了解决问题的范围。我在最后添加了代码和输出。考虑到您是初学者,我编写了一个非常简单的程序,该程序并未针对性能进行优化。
我将略过您需要遵循的方法:
s, t, a, b, m, n
。d
值。 (分别为苹果和橙子的d
值数组)。请记住,这些值分别是分别距苹果树和橙树的距离。请牢记这一点,然后继续下一步。0
坐标开始。这很简单。只需将该元素的d
值,即d[i]
添加到a
或b
值,即相应树的位置,即d_apple[i] + a
或d_orange[i] + b
。假设结果为dist
。s
和t
之间,则增加与该树对应的计数器。代码:
#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