一个人必须越过一条道路并且每一步都要么获得一些能量或者输掉一些(这个信息以阵列的形式提供)。找出他应该开始的最小能量,以便在任何水平上他的能量不低于1.
但是下面的程序总是打印“错误”而不是数字。
#include<stdio.h>
#include<limits.h>
int main(){
int a[]={10,20,20};
int n = sizeof(a)/sizeof(a[0]);
int ans = calldistance(a,n);
if(ans==-1)
printf("error");
else
printf("%d",ans);
return 0;
}
int calldistance(int a[],int n){
int i,min=INT_MAX;
for(i=0;i<n;i++){
min+=a[i];
if(min<1) return -1;
else continue;
}
return min;
}
答案 0 :(得分:1)
您总是返回-1
,因为如果数组是值不重要的数组,则称之为退出。
您需要跟踪数组的部分总和。特别是你需要知道何时部分和处于其最低负值(或零)。这个+ 1的绝对值就是你的答案。
如果总和从未低于1,那么你的答案只有1。
int calldistance(const int a[], const int n) {
int min_partial_sum = 0;
int partial_sum = 0;
for(int i = 0; i < n; ++i) {
partial_sum += a[i];
if(min_partial_sum > partial_sum)
min_partial_sum = partial_sum;
}
if(min_partial_sum < 0)
return -min_partial_sum + 1;
return 1;
}
答案 1 :(得分:-1)
int calldistance(int a[],int n){
int i,min=INT_MAX;
for(i=0;i<n;i++){
min+=a[i];
if(min<1) return -1;
else continue;
}
return min;
}
在上面的功能中,您正在初始化min=INT_MAX
,如果您添加偶数1,它将返回一个负数。这就是为什么你总是以error
作为答案。