感谢,终于知道哪里错了
by cheat13 @ 2023-11-17 22:14:55
还是不对,加了检测了
```cpp
int main() {
int n;
int count = 0;
int num[100] = { 0 };
int used[2][100] = { 0 };
cin >> n;
for (int i = 0; i < n; i++) {
cin >> num[i];
}
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
if (num[j] == num[i]) {
continue;
}
for (int k = 0; k < n; k++) {
if (num[i] + num[j] == num[k]) {
bool flag = true;
for (int p = 0; p < count; p++) {
if (num[i] == used[0][p] || num[i] == used[1][p])
{
if (num[i] == used[0][p] && num[j]==used[1][p]) {
flag = false;
break;
}
else if (num[i] == used[1][p] && num[j] == used[0][p]) {
flag = false;
break;
}
}
}
if (flag) {
used[0][count] = num[i];
used[1][count] = num[j];
count++;
}
}
}
}
}
cout << count;
return 0;
}
```
by cheat13 @ 2023-11-17 22:30:56
@[cheat13](/user/1104415) 这个可以过你说的,但还是过不了用例
by cheat13 @ 2023-11-17 22:32:46
@[cheat13](/user/1104415)
我用你代码显示编译错误。
你的意思是过得了我给的数据但过不了样例吗?
如果是这样应该是你迭代所有数字组合的部分有问题。
因为这题只考虑前两个数的和而不考虑顺序,所以(1,2)和(2,1)是等价的,只需要其中一个。
但(1,2)和(2,1)实际上会被当成不同的元组,所以数量会错误。
by Operation0701 @ 2023-11-18 13:44:05
@[Operation0701](/user/1170071) 是的,能过你的样例,你说的我也解决了,如果1+2=3存在过,我存起来1和2,如果再出现1和2这个组合,无论1是i还是j,都不会加次数
by cheat13 @ 2023-11-18 17:32:55
不知道你是样例几出了问题,你可以把错的样例数据发给我,然后我打表出所有组合和你对比一下。
by Operation0701 @ 2023-11-18 18:51:39
@[cheat13](/user/1104415) 这么长?
by _buzhidao_ @ 2023-12-06 19:28:35
@[Operation0701](/user/1170071) 非常感谢 **lz**,终于想明白了
by oyq784580 @ 2023-12-10 16:47:03
谢谢lz!!
by guoshuminhhh @ 2023-12-11 15:15:00
感谢感谢
by August16 @ 2023-12-12 13:15:52