c++dfs样例没过,求改

P1473 [USACO2.3] 零的数列 Zero Sum

## 不得不说一句,你的错误点有点多 [所有错误点修改完成后即可AC (点此看评测详情)](https://www.luogu.com.cn/record/143621672) - **错误点1** ``` op[i]='+'; num[i]=a[i]; cnt24(i+1); op[i]='-'; num[i]=-a[i]; cnt24(i+1); op[i]=' '; ``` 这一部分不太对。在题目说的是按ASCII码的顺序输出 自己输出一下,发现 它们的值分别为 43 45 32 所以应该先枚举 **空格**,再枚举 **加号**,最后是 **减号** (本蒟蒻也错在这里了,只不过测样例的时候发现了,还是**要好好读题**) 正确代码: ``` op[i]=' '; num[i]=a[i]; cnt24(i+1); op[i]='+'; num[i]=-a[i]; cnt24(i+1); op[i]='-'; num[i]=num[i-1]*10+a[i]; num[i-1]=0; cnt24(i+1); ``` - **错误点2** **计算部分有大问题!!!** ``` int ans=0; for(int i=1;i<=n;i++) { ans+=num[i]; } ``` 你可能没认真去做这道题,这就是你的计算部分,就把所有的数累加起来?请你好好改一改(这里你自己写吧,有问题找我,我不放代码) --- 以上是所有错误点,本蒟蒻在此留下框架: ``` #include<iostream> using namespace std; int a[15],num[15],cnt,n; char op[15]; int run() //计算部分 { } void cnt24 (int i) { if(i==n+1) { // int ans=0; // for (int i=1;i<=n;i++) // { // ans+=num[i]; // } // if (run()==0) { cnt++; cout << 1; for(int i=2;i<=n;i++) { printf("%c%d",op[i],i); } printf("\n"); } return ; } // 递归部分 } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) { a[i]=i; } num[1]=1; cnt24(2); return 0; } ``` --- 希望你以后能认真作答,再见(此贴结)
by ge_youxi @ 2024-01-21 10:49:08


[本蒟蒻AC评测详情](https://www.luogu.com.cn/record/143618239) [你的错误代码改正之后的评测详情](https://www.luogu.com.cn/record/143621672)
by ge_youxi @ 2024-01-21 10:51:30


@[ge_youxi](/user/1068455) 非常感谢,已AC(我是楼主小号)(话说计算部分哪出错了,我没发现有什么问题,没改就AC了)
by yinbe2 @ 2024-03-30 13:48:45


|