1. 程式人生 > >NOIP-珠心算

NOIP-珠心算

 

題目描述

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

輸入描述:

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

輸出描述:

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

輸入

複製
4
1 2 3 4

輸出

複製
2

說明

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

備註:

對於 100% 的資料, 3 ≤ n ≤ 100 ,測驗題給出的正整數大小不超過 10,000 。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int n;
    cin>>n;
    int a[n];
    int b[n];
    int x = 0;
    int i;
    for(i=0;i<n;i++)
    cin>>a[i];
    sort(a,a+n);
    int m=0;
    int j,k;
    int y;
    int flag;
    for(i=0;i<n-2
;i++) { for(j=i+1;j<n-1;j++) { for(k=j+1;k<n;k++) { if(a[i]+a[j]==a[k]) { flag = 0; for(y=0;y<x;y++) { if(a[k] == b[y]) { flag = 1; break; } } if(flag==0) { m++; b[x++] = a[k]; } } } } } cout<<m; }

總結

先對所有元素進行排序,然後判斷前兩個相加是否等於後面的,注意這題有個小坑,不是判斷多少個式子成立,而是判斷符合結果的數有多少個,所以用一個數組儲存符合的和數,再此得此和數時不進行判斷。