珠心算測驗,枚舉,標記

題目鏈接:P2141 珠心算測驗

題目描述
珠心算是一種通過在腦中模擬算盤變化來完成快速運算的一種計算技術。珠心算訓練,既能夠開發智力,又能夠爲日常生活帶來很多便利,因而在很多學校得到普及。

某學校的珠心算老師採用一種快速考察珠心算加法能力的測驗方法。他隨機生成一個正整數集合,集合中的數各不相同,然後要求學生回答:其中有多少個數,恰好等於集合中另外兩個(不同的)數之和?

最近老師出了一些測驗題,請你幫忙求出答案。

(本題目爲2014NOIP普及T1)

輸入格式
共兩行,第一行包含一個整數nn,表示測試題中給出的正整數個數。

第二行有nn個正整數,每兩個正整數之間用一個空格隔開,表示測試題中給出的正整數。

輸出格式
一個整數,表示測驗題答案。

輸入輸出樣例
輸入
4
1 2 3 4
輸出
2
說明/提示
【樣例說明】

由1+2=3,1+3=41+2=3,1+3=4,故滿足測試要求的答案爲22。

注意,加數和被加數必須是集合中的兩個不同的數。

【數據說明】

對於100%100%的數據,3 ≤ n ≤ 1003≤n≤100,測驗題給出的正整數大小不超過10,000。

解題思路:將輸入的每個數標記爲1,加過之後標記爲0,不會出現重複

#include<bits/stdc++.h> 
using namespace std;
const int N=10005; 
int a[105],s;
bool flag[N]; 
int n,tol;//定義爲全局變量後值會默認爲0 
int main(){
	cin>>n;
	for(int i = 1;i <= n;i++){
		cin>>a[i];
		flag[a[i]]=1;//標記輸入的數
	}
	for(int i=1;i<n;i++){//枚舉 
		for(int j = i + 1;j <= n;j++){
			s=a[i]+a[j];
			if(s<10000 && flag[s]){
				tol++;
				flag[s]=0;//枚舉一個和   標記爲0 
			}
		}
	}
	cout<<tol<<endl;
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章