整数在 C++ 中没有被类型转换为 bool
integer is not getting typecasted to bool in c++
编码时遇到运行时错误。这是我的代码:
int f(int a[],int n,int sum)
{
int dp[sum+1][n+1];
for(int i=0;i<=n;i++)
dp[0][i]=1;
for(int i=1;i<=sum;i++)
dp[i][0]=0;
for(int i=1;i<=sum;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i][j-1];
if(i>=a[j-1])
dp[i][j]=(dp[i][j])^(dp[i-a[j-1]][j-1]);
}
}
return dp[sum][n];
}
这里的总和总是正数。经过大量调试后我无法得到答案所以在匹配我的解决方案答案之后。这就是答案。
bool f(int a[],int n,int sum)
{
bool dp[sum+1][n+1];
for(int i=0;i<=n;i++)
dp[0][i]=true;
for(int i=1;i<=sum;i++)
dp[i][0]=false;
for(int i=1;i<=sum;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i][j-1];
if(i>=a[j-1])
dp[i][j]=(dp[i][j])||(dp[i-a[j-1]][j-1]);
}
}
return dp[sum][n];
}
所以我的问题是为什么int不能转换为bool。
P.S。 : 而不是 ||我也试过 |因为这是按位运算符,但我仍然遇到运行时错误。有人请帮我得到答案。
运行时错误最可能的原因似乎是行
dp[i][j]=(dp[i][j])^(dp[i-a[j-1]][j-1]);
而且最有可能是 dp[i-a[j-1]]
,它根据 a
数组中的值获取索引。这很容易导致 dp
被负值索引。
这种怀疑也得到以下事实的支持:它 "works" 与 ||
(逻辑或)但不适用于 ^
或 |
(二元运算符) ).这是因为逻辑运算符具有短路评估(如果 dp[i][j]
为真,则第二个运算符不需要并且根本不被评估),而二元运算符总是评估两个操作数。
所以似乎在 ||
的情况下,第二个操作数没有被评估,因此它不会崩溃,而对于二元运算符,它被评估并且索引超出范围并使应用程序崩溃。
编码时遇到运行时错误。这是我的代码:
int f(int a[],int n,int sum)
{
int dp[sum+1][n+1];
for(int i=0;i<=n;i++)
dp[0][i]=1;
for(int i=1;i<=sum;i++)
dp[i][0]=0;
for(int i=1;i<=sum;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i][j-1];
if(i>=a[j-1])
dp[i][j]=(dp[i][j])^(dp[i-a[j-1]][j-1]);
}
}
return dp[sum][n];
}
这里的总和总是正数。经过大量调试后我无法得到答案所以在匹配我的解决方案答案之后。这就是答案。
bool f(int a[],int n,int sum)
{
bool dp[sum+1][n+1];
for(int i=0;i<=n;i++)
dp[0][i]=true;
for(int i=1;i<=sum;i++)
dp[i][0]=false;
for(int i=1;i<=sum;i++)
{
for(int j=1;j<=n;j++)
{
dp[i][j]=dp[i][j-1];
if(i>=a[j-1])
dp[i][j]=(dp[i][j])||(dp[i-a[j-1]][j-1]);
}
}
return dp[sum][n];
}
所以我的问题是为什么int不能转换为bool。 P.S。 : 而不是 ||我也试过 |因为这是按位运算符,但我仍然遇到运行时错误。有人请帮我得到答案。
运行时错误最可能的原因似乎是行
dp[i][j]=(dp[i][j])^(dp[i-a[j-1]][j-1]);
而且最有可能是 dp[i-a[j-1]]
,它根据 a
数组中的值获取索引。这很容易导致 dp
被负值索引。
这种怀疑也得到以下事实的支持:它 "works" 与 ||
(逻辑或)但不适用于 ^
或 |
(二元运算符) ).这是因为逻辑运算符具有短路评估(如果 dp[i][j]
为真,则第二个运算符不需要并且根本不被评估),而二元运算符总是评估两个操作数。
所以似乎在 ||
的情况下,第二个操作数没有被评估,因此它不会崩溃,而对于二元运算符,它被评估并且索引超出范围并使应用程序崩溃。