#include <bits/stdc++.h> using namespace std; int main() { string s; getline(cin,s); stringstream str(s); string ss; vector<int> num; while(getline(str,ss,',')){ num.push_back(stoi(ss)); } int len=num.size(); int m; cin>>m; vector<int>dp(m+1,0); dp[0]=1; for(int i=0;i<len;i++){ int n=num[i-1]; for(int j=m;j>=n;j--){ dp[j]=dp[j]+dp[j-n]; } } cout<<dp[m]<<endl; return 0; } 为什么输出为0
时间: 2024-04-16 16:28:44 浏览: 25
在你提供的代码中,输出为0的原因是在第一个for循环中,变量i的初始值为0,导致在计算n时出现越界问题。
你可以将第一个for循环中的变量i的初始值改为1,如下所示:
```cpp
for(int i=1; i<=len; i++){
int n = num[i-1];
for(int j=m; j>=n; j--){
dp[j] = dp[j] + dp[j-n];
}
}
```
这样就可以避免越界问题,正确计算每个数值n对应的情况。
希望这可以解决你的问题!如果还有其他疑问,请随时提问。
相关问题
#include<bits/stdc++.h> using namespace std; string a; int main() { getline(cin,a); for(int i=0;i<=a.size();i++) { if(a[i]=='(') { while(a[i]!=')') { i++; } continue; } else { cout<<a[i]; } } }为何WA
这段代码的问题在于第7行的循环条件是 `i<=a.size()`,应该改为 `i<a.size()`,否则会多读取一次字符串 `a` 的最后一个字符,导致越界。同时,第4行应该加上判断条件 `if(i==a.size()) break;`,以防止在最后一个字符是左括号时出现无限循环的情况。修改后的代码如下:
```c++
#include<bits/stdc++.h>
using namespace std;
string a;
int main() {
getline(cin,a);
for(int i=0;i<a.size();i++) {
if(a[i]=='(') {
while(a[i]!=')') {
i++;
if(i==a.size()) break;
}
continue;
}
else {
cout<<a[i];
}
}
}
```
#include<bits/stdc++.h> using namespace std; int main(){ int a[26]; string s,s1,s2,s3; getline(cin,s1); getline(cin,s2); s = s1+s2; s3 = ""; for(int i = 0;i<s.length();i++){ if(a[s[i]] == 0) { s3 =s3+s[i]; a[s[i]] = 1; } } cout<<s3; return 0; }c++中利用这个代码将输入的两个字符串按顺序拼接的同时不出现重复字符有什么问题
这个代码有以下问题:
1. `a` 数组没有初始化,会导致数组中的元素值是不确定的,应该将其初始化为 0。
2. 在判断字符是否出现过时,应该使用字符的 ASCII 码作为数组下标,而不是字符本身。
3. 对于字符串中的空格和其他特殊字符,也会被计入,可能会导致输出结果出错。
4. 当输入的字符串中包含多个相同的字符时,只会输出一个,而不是全部输出。
修正后的代码如下所示:
```c++
#include<bits/stdc++.h>
using namespace std;
int main(){
int a[128] = {0}; // 初始化数组
string s,s1,s2,s3;
getline(cin,s1);
getline(cin,s2);
s = s1+s2;
s3 = "";
for(int i = 0;i<s.length();i++){
if(a[int(s[i])] == 0 && isalpha(s[i])) { // 使用 ASCII 码作为数组下标,并且判断是否为字母
s3 = s3 + s[i];
a[int(s[i])] = 1;
}
}
cout<<s3;
return 0;
}
```
其中,`isalpha()` 函数用于判断字符是否为字母。