## 不得不说一句,你的错误点有点多
[所有错误点修改完成后即可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