数苹果和橘子
Counting Apple and Oranges
我看到之前有人问过这个问题,这就是link:Apple and Orange HackerRank。我必须告诉你,我的怀疑不像这个人,只是我写了一段代码,它在大多数测试用例上都能正常工作,但在某些测试用例上却失败了。
我已经检查了我的代码,我非常有信心我的代码可以正常工作。
问题link是:Apple And Orange HackerRank Question
问题陈述
给定一个人的房子,其房屋长度在变量 s 和 t 之间,我们有两棵树,一棵是苹果,另一棵是橙子。由于我们已经分别给出了掉落的苹果和橙子的一些距离,我们要做的就是找到那些距离落在 s and t
之间的苹果和橙子,或者我必须说哪个落在 xyz 人的屋。
输入格式
- 第一行包含两个 space 分隔的整数,分别表示 s 和 t 的值。
- 第二行包含两个 space 分隔的整数,分别表示 a 和 b 的值。
- 第三行包含两个space分隔的整数,分别表示m和n的值。
- 第四行包含 space 分隔的整数,表示每个苹果从点 a 落下的距离。
- 第五行包含 space 分隔的整数,表示每个橙子从点 b 落下的距离。
代码
static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
int appleSum=0, orangeSum=0, appleCount=0, orangeCount=0;
for(int i : apples){
appleSum = Math.abs(a+i);
if(appleSum>=s && appleSum<=t)
appleCount++;
}
for(int j : oranges){
orangeSum = Math.abs(b+j);
if(orangeSum>=s && orangeSum<=t)
orangeCount++;
}
System.out.print(appleCount + "\n" + orangeCount);
}
这是我的一段代码在大多数测试用例上都运行良好,但这个用例实际上很混乱。我实际上是在写下一个失败的测试用例的要点,如果对你们来说效果很好,我会给你相同的 link。
通过测试用例{1}
7 11
5 15
3 2
-2 2 1
5 -6
通过测试用例{2}
7 10
4 12
3 3
2 3 -4
3 -2 -4
失败的测试用例
37455 87275
35609 89610
73201 77971
19736 19374 -68796 0 -68800 -80005 -88383 -8147 73241 -33256 20227 0
41620 30182 -95883 -88718 93989 44405 66495 87717 100000 -99845 -63634
98450 -63318 23501 -39150 22335 4955 -98587 -13608 -95388 -41752 4959
22375 -20025 -72101 -90667 -41569 94758 -26725 -53444 -8783 -81879
57041 23682 -60064 -23505 2850 96653 18487 -6644 -90710 71994 21513
36066 -65894 -9897 -86990 -97347 89784 88447 93133 12662 61685 -22914
-39075 -96807 -80465 -53820 36851 -51794 -11967 36658 -75592 22004 -961
66645 -93123 -65326 81871 -21785 -48242 -63552 32509 51078 -37656
-14966 4017 -58411 9346 13544 -63028 -93738 93924 68463 55032 -10046
87907 -20967 78972 85338 19584 45460 84382 -34690 -82301 14093 -60802
4170 -90955 92241 -34932 68913 -22262 49469 -45729 7942 65753 17354
-28647 93058 -43811 21411 8543 -44799 -71815 -40743 60445 -66946 -85090
-96873 97385 -15317 54454 -21021 -60256 -41301 -98896 -97184 63098
-60230 41376 42273 45807 58041 54260 21196 -85191 85267 -28305 30220
-76826 82999 72627 7{-truncated-}
预期输出
89610
19582
还有更多内容,link 在这里:Test Case Inputs
请注意:我实际上并没有要求解决方案,我的代码有效,但我不知道为什么这种逻辑对于这样的输入会失败。
如有任何帮助,我们将不胜感激!谢谢 :)
编辑
我曾尝试使用 long
代替 int
,以防像失败的测试用例中那样的较大值,但它再次失败!
long appleSum=0, orangeSum=0, appleCount=0, orangeCount=0;
这段代码通过了所有测试用例,你的问题是你正在使用 Math.abs()
,你不应该这样做,因为 sum 也可能有负值。
static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
int appleCount = 0;
int orangeCount = 0;
for(int i:apples){
if(s<=i+a && i+a<=t)
appleCount++;
}
for (int j : oranges) {
if (s <= j + b && j+b <= t)
orangeCount++;
}
System.out.println(appleCount);
System.out.println(orangeCount);
}
这个问题太老了,但仍然有人可能需要这个。
abs() 是你犯的错误。
看代码
void countApplesAndOranges(int s, int t, int a, int b, vector<int> apples, vector<int> oranges) {
int size_a=apples.size();
int size_o=oranges.size();
int count_a=0,count_o=0;
for(int i=0;i<size_a;i++)
{
if(apples[i]+a>=s&&apples[i]+a<=t)
{
count_a++;
}
}
for(int j=0;j<size_o;j++)
{
if(oranges[j]+b<=t&&oranges[j]+b>=s)
{
count_o++;
}
}
cout<<count_a<<'\n'<<count_o;
}
我看到之前有人问过这个问题,这就是link:Apple and Orange HackerRank。我必须告诉你,我的怀疑不像这个人,只是我写了一段代码,它在大多数测试用例上都能正常工作,但在某些测试用例上却失败了。
我已经检查了我的代码,我非常有信心我的代码可以正常工作。
问题link是:Apple And Orange HackerRank Question
问题陈述
给定一个人的房子,其房屋长度在变量 s 和 t 之间,我们有两棵树,一棵是苹果,另一棵是橙子。由于我们已经分别给出了掉落的苹果和橙子的一些距离,我们要做的就是找到那些距离落在 s and t
之间的苹果和橙子,或者我必须说哪个落在 xyz 人的屋。
输入格式
- 第一行包含两个 space 分隔的整数,分别表示 s 和 t 的值。
- 第二行包含两个 space 分隔的整数,分别表示 a 和 b 的值。
- 第三行包含两个space分隔的整数,分别表示m和n的值。
- 第四行包含 space 分隔的整数,表示每个苹果从点 a 落下的距离。
- 第五行包含 space 分隔的整数,表示每个橙子从点 b 落下的距离。
代码
static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
int appleSum=0, orangeSum=0, appleCount=0, orangeCount=0;
for(int i : apples){
appleSum = Math.abs(a+i);
if(appleSum>=s && appleSum<=t)
appleCount++;
}
for(int j : oranges){
orangeSum = Math.abs(b+j);
if(orangeSum>=s && orangeSum<=t)
orangeCount++;
}
System.out.print(appleCount + "\n" + orangeCount);
}
这是我的一段代码在大多数测试用例上都运行良好,但这个用例实际上很混乱。我实际上是在写下一个失败的测试用例的要点,如果对你们来说效果很好,我会给你相同的 link。
通过测试用例{1}
7 11
5 15
3 2
-2 2 1
5 -6
通过测试用例{2}
7 10
4 12
3 3
2 3 -4
3 -2 -4
失败的测试用例
37455 87275
35609 89610
73201 77971
19736 19374 -68796 0 -68800 -80005 -88383 -8147 73241 -33256 20227 0
41620 30182 -95883 -88718 93989 44405 66495 87717 100000 -99845 -63634
98450 -63318 23501 -39150 22335 4955 -98587 -13608 -95388 -41752 4959
22375 -20025 -72101 -90667 -41569 94758 -26725 -53444 -8783 -81879
57041 23682 -60064 -23505 2850 96653 18487 -6644 -90710 71994 21513
36066 -65894 -9897 -86990 -97347 89784 88447 93133 12662 61685 -22914
-39075 -96807 -80465 -53820 36851 -51794 -11967 36658 -75592 22004 -961
66645 -93123 -65326 81871 -21785 -48242 -63552 32509 51078 -37656
-14966 4017 -58411 9346 13544 -63028 -93738 93924 68463 55032 -10046
87907 -20967 78972 85338 19584 45460 84382 -34690 -82301 14093 -60802
4170 -90955 92241 -34932 68913 -22262 49469 -45729 7942 65753 17354
-28647 93058 -43811 21411 8543 -44799 -71815 -40743 60445 -66946 -85090
-96873 97385 -15317 54454 -21021 -60256 -41301 -98896 -97184 63098
-60230 41376 42273 45807 58041 54260 21196 -85191 85267 -28305 30220
-76826 82999 72627 7{-truncated-}
预期输出
89610
19582
还有更多内容,link 在这里:Test Case Inputs
请注意:我实际上并没有要求解决方案,我的代码有效,但我不知道为什么这种逻辑对于这样的输入会失败。
如有任何帮助,我们将不胜感激!谢谢 :)
编辑
我曾尝试使用 long
代替 int
,以防像失败的测试用例中那样的较大值,但它再次失败!
long appleSum=0, orangeSum=0, appleCount=0, orangeCount=0;
这段代码通过了所有测试用例,你的问题是你正在使用 Math.abs()
,你不应该这样做,因为 sum 也可能有负值。
static void countApplesAndOranges(int s, int t, int a, int b, int[] apples, int[] oranges) {
int appleCount = 0;
int orangeCount = 0;
for(int i:apples){
if(s<=i+a && i+a<=t)
appleCount++;
}
for (int j : oranges) {
if (s <= j + b && j+b <= t)
orangeCount++;
}
System.out.println(appleCount);
System.out.println(orangeCount);
}
这个问题太老了,但仍然有人可能需要这个。 abs() 是你犯的错误。 看代码
void countApplesAndOranges(int s, int t, int a, int b, vector<int> apples, vector<int> oranges) {
int size_a=apples.size();
int size_o=oranges.size();
int count_a=0,count_o=0;
for(int i=0;i<size_a;i++)
{
if(apples[i]+a>=s&&apples[i]+a<=t)
{
count_a++;
}
}
for(int j=0;j<size_o;j++)
{
if(oranges[j]+b<=t&&oranges[j]+b>=s)
{
count_o++;
}
}
cout<<count_a<<'\n'<<count_o;
}