1. 程式人生 > >2014 junior T1 珠心算測試 題解

2014 junior T1 珠心算測試 題解

題目描述

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

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

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

(本題目為2014NOIP普及T1)

輸入格式:

共兩行,第一行包含一個整數n,表示測試題中給出的正整數個數。

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

輸出格式:

一個整數,表示測驗題答案。

輸入樣例#1:

4
1 2 3 4

輸出樣例#1:

2

【樣例說明】

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

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

【資料範圍】

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

解題思路

這道題就是一道純暴力就可一解出的題目時間複雜度是O(n^3)
列舉所有組合的可能,一個一個求解。然後用一個bool與一個計數的變數ans就可以了。

程式碼

#include <iostream>
#include <stdio.h>
using namespace std; int main(){ int a; scanf("%d",&a); int s[110]; int ans=0; bool v[110];//是否被加到過 for(int i=0;i<110;i++){ v[i]=true; } for(int i=0;i<a;i++){ scanf("%d",&s[i]); } for(int i=0;i<a;i++){ for(int j=0;j<a;j++){ for(int k=0;k<a;k++){ if(s[i]+s[j]==s[k]
&&i!=j){ v[k]=false;//如果a+b=c並且兩數不相等,這個數就設為被加到過 } } } } for(int i=0;i<a;i++){ if(v[i]==false){ ans++; } } printf("%d",ans); return 0; }

我真菜,這道題做了半個小時。。。