打赏

P2141珠心算测验题解

先来看一下题目:某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

这道题很简单,本来想用STL的,但提交了五次都WA,只得作罢

这道题我们需要用到枚举,可以打三重循环:

int a[101],i,j,k,n,ans=0;
cin >> n;

for(i=0;i<n;i++) cin >> a[i];
for(i=0;i<n;i++)
	for(j=0;j<n;j++)
		for(j=0;j<n;j++)
			if(i!=j and i!=k and j!=k and a[i]+a[j]==a[k])
				ans++;
cout << ans

编译运行,你会发现:为什么答案和测试数据不一样?难到Return蒟蒻坑了我???

当然,我们漏了一个步骤:去重

那么如何去重呢?我们需要定义一个数组b,如果a[k]被加过,那么b[k]=1(b数组默认为0)

完整代码:

#include <iostream>
using namespace std;

int a[101],b[101],i,j,k,n,ans=0;

int main() {
    cin >> n;
    for(i=0;i<n;i++) cin >> a[i]; //读取
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            for(k=0;k<n;k++)
                if(i!=j and i!=k and j!=k and !b[k] and a[i]+a[j]==a[k]){ //判断是否符合条件
                    ans++;
                    b[k]=1; //标记
                }
    
    cout << ans; //得一大堆分
    return 0;
}

posted @ 2020-02-10 21:21  _Return  阅读(...)  评论(...编辑  收藏