【发布时间】:2017-06-14 09:35:40
【问题描述】:
在编码时,我遇到了运行时错误。这是我的代码:
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。 附言: 而不是 ||我也试过 |因为这是按位运算符,但仍然出现运行时错误。请有人帮我解答。
【问题讨论】:
-
C++ bool 有两个值
true和false映射到1和0。 -
你为什么期待
bool的演员表?运营商^不期望bool -
请描述一下这个函数实际上应该做什么。
-
运行时错误可能是由类型转换(即编译时)以外的其他原因引起的,可能是对数组的越界访问。还要注意
(dp[i][j])^(dp[i-a[j-1]][j-1])(二进制异或)不等同于(dp[i][j])||(dp[i-a[j-1]][j-1])(逻辑或,或者甚至是二进制或)。如果您想将值用作布尔值并需要逻辑异或,您也可以使用(dp[i][j]) != (dp[i-a[j-1]][j-1])。 -
此代码中没有强制转换。问题是关于转化。
标签: c++ boolean bitwise-or typecasting-operator