我一直在尝试这个问题,但是以下问题的代码给了我错误的答案 问题陈述:您有三个圆柱体,每个圆柱体具有相同的直径,但它们的高度可能不同。您可以通过多次移除和丢弃其最顶部的圆柱来更改堆栈的高度。
找出堆栈的最大可能高度,使所有堆栈的高度完全相同。这意味着您必须从三个堆叠中的零个或多个顶部移除零个或多个圆柱体,直到它们具有相同的高度,然后打印高度。必须以最大化高度的方式执行移除
的说明:
见图:Explanation
示例输入
5 3 4
3 2 1 1 1
4 3 2
1 1 4 1
示例输出
5
我的算法就是:
第一步。得到3个数组并反转它们,从现有数组中创建一个新数组,每个元素是所有前面元素的总和。例如:[3,2,1,1,1] - > [1,1,1,2,3] - > [1,2,3,5,8]
因此形成的3个新阵列将是[1,2,3,5,8] [2,5,9] [1,5,6,7]
第二步。取最小的数组遍历最小的数组和另外2个数组中的搜索元素 - 如果元素存在于其他2个数组中,则停在那里并返回数字。
例如。这里我从element-2开始:其他2个数组中不存在。接下来我从element-5开始:它存在于其他2个数组中。
我的代码:
#include<iostream>
using namespace std;
int main()
{
long long h1,h2,h3;
cin>>h1>>h2>>h3;
long long a[h1],b[h2],c[h3];
long long sum1=0,sum2=0,sum3=0;
for(long long i=0;i<h1;i++){
cin>>a[h1-i-1];
}
for(long long i=0;i<h2;i++){
cin>>b[h2-i-1];
}
for(long long i=0;i<h3;i++){
cin>>c[h3-i-1];
}
for(long long i=0;i<h1;i++){
sum1=sum1+a[i];
a[i]=sum1;
}
for(long long i=0;i<h2;i++){
sum2=sum2+b[i];
b[i]=sum2;
}
for(long long i=0;i<h3;i++){
sum3=sum3+c[i];
c[i]=sum3;
}
long long i = 0, j = 0, k = 0;
while (i < h1 && j < h2 && k < h3)
{
if (a[i] == b[j] && b[j] == c[k])
{ cout << a[i] << " "; return 0; }
else if (a[i] < b[j])
i++;
else if (b[j] < c[k])
j++;
else
k++;
}
cout<<0;
return 0;
}
我应该对代码运行哪些更大的输入值进行修改?
此代码为某些输入提供了错误的答案。
请帮助
答案 0 :(得分:-1)
您应该在while循环中从高值到低值遍历数组。因为我们需要最高价值。因此更新你的代码
long long i = h1-1, j = h2-1, k = h3-1;
while (i >-1 && j > -1 && k >-1)
{
if (a[i] == b[j] && b[j] == c[k])
{ cout << a[i] << " "; return 0; }
else if (a[i] > b[j])
i--;
else if (b[j] > c[k])
j--;
else
k--;
}