求各位大佬帮忙,这个只能得到三十分

P2141 [NOIP2014 普及组] 珠心算测验

希望更丰富的展现?使用Markdown
by 1saunoya @ 2019-07-13 17:12:04


@[清风ღ](/space/show?uid=96580) 不好意思,我是新手,只会用c语言写程序,这个哪里错我也不知道
by peiger @ 2019-07-13 17:15:35


```c #include"stdio.h" define N 200 int main() { int a[N],n,ans=0; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&a[i]);//写入数据 for(int i=0;i<n;i++) {for(int j=0;j<n;j++) {for(int k=j;k<n;k++) {if(j!=i&&k!=i&&j!=k) {if(a[i]==a[j]+a[k]) ans++;}}}} printf("%d",ans); return 0; } ``` 你的代码...莫非是,没有判重?
by    吾皇 @ 2019-07-13 17:26:35


@[   吾皇](/space/show?uid=136601) 不是,就是有几组数组测不成功
by peiger @ 2019-07-13 18:04:22


..比如 ``` 5 1 2 3 4 5 ``` 这个数据。答案应该是3,你的程序会输出4. 题目里有一句 ``` 注意,加数和被加数必须是集合中的两个不同的数。 ```
by    吾皇 @ 2019-07-13 18:24:34


@[   吾皇](/space/show?uid=136601) 谢谢,我在看看我的程序
by peiger @ 2019-07-13 20:06:59


@[   吾皇](/space/show?uid=136601) 我知道自己错误的地方了,但是想不起来解决办法
by peiger @ 2019-07-13 20:18:24


抱歉刚才忙,你可以建一个bool数组m把你记过的a[i]设为true,然后 ```cpp if(a[i]==a[j]+a[k]) if(m[a[i]]==false){ ans++; m[a[i]]=true; } ```
by    吾皇 @ 2019-07-13 21:13:18


|