1. 程式人生 > >【列舉】珠心算測驗[c++]

【列舉】珠心算測驗[c++]

題目描述

珠心算是一種通過在腦中模擬算盤變化來完成快速運算的一種計算技術。珠心算訓練,既能夠開發智力,又能夠為日常生活帶來很多便利,因而在很多學校得到普及。 某學校的珠心算老師採用一種快速考察珠心算加法能力的測驗方法。他隨機生成一個正整數集合,集合中的數各不相同,然後要求學生回答:其中有多少個數,恰好等於集合中另外兩個(不同的)數之和? 最近老師出了一些測驗題,請你幫忙求出答案。

輸入
輸入共兩行,第一行包含一個整數n,表示測試題中給出的正整數個數。 第二行有n個正整數,每兩個正整數之間用一個空格隔開,表示測試題中給出的正整數。3<=n<=100,給出的正整數大小不超過10000

輸出
輸出共一行,包含一個整數,表示測驗題答案。

樣例輸入
4
1 2 3 4

樣例輸出
2

提示
由1+2=3,1+3=4,故滿足測試要求的答案為2。注意,加數和被加數必須是集合中的兩個不同的數。

分析

從題目給的資料看出,任意兩個數相加的結果不會超過20000;最大組合數C(100,2)=4950。
可以開一個20000的bool型陣列,用來記錄兩數相加能否得到某一結果,相當於打表。

程式碼[c++]
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; int main() { int n; scanf("%d",&n); int a[105]; bool cnt[20005]= {0}; for(int i=0; i<n; i++) scanf("%d",a+i); for(int i=0; i<n-1; i++) { for(int j=i+1; j<n; j++) { cnt[a[i]+a[j]]=true; } } int
sum=0; for(int i=0; i<n; i++) { if(cnt[a[i]])sum++; } printf("%d\n",sum); return 0; }