CCF CSP 2014 09 1 相鄰數對

2021-10-10 22:40:40 字數 1242 閱讀 2163

[ccf-csp]2014-09-1-相鄰數對

試題編號: 201409-1

試題名稱: 相鄰數對

時間限制: 1.0s

記憶體限制: 256.0mb

問題描述:

問題描述

給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。

輸入格式

輸入的第一行包含乙個整數n,表示給定整數的個數。

第二行包含所給定的n個整數。

輸出格式

輸出乙個整數,表示值正好相差1的數對的個數。

樣例輸入

610 2 6 3 7 8

樣例輸出

3樣例說明

值正好相差1的數對包括(2, 3), (6, 7), (7, 8)。

評測用例規模與約定

1<=n<=1000,給定的整數為不超過10000的非負整數。

問題描述:

首先輸入正整數n,接著輸入n個正整數,對於這n個數,統計輸出其中的相鄰數對(差值為1的數對)。

問題分析:

看似是乙個n個數與n個數進行比較(時間複雜度高)的問題,但是可以用乙個標誌陣列來處理。因為,這n個數是正整數,最大值為10000。

另外一種做法是使用陣列排序,然後再統計相鄰對數。

程式說明:

方法一:使用標記陣列進行統計。

這裡寫了c語言和c++語言兩個版本的程式。

標誌陣列需要左右多2個元素,所以陣列元素的個數為n+2。使用函式memset()對標誌陣列進行初始化是套路,一定要理解掌握並且熟練應用。使用布林陣列也是本程式的乙個關鍵,可以節省空間,但是要付出時間的代價。

方法二:使用陣列排序實現。

排序需要付出稍微多一點的時間代價,通常其時間複雜度為o(n*logn),但是程式**更加簡潔易懂。

我的答案:

#include

#include

using

namespace std;

intmain()

;int sum =0;

for(

int i =

0;i < n;i++

)for

(int i =

0;i < n;i++)}

}for

(int i =

1;i < n;i++

) cout << sum << endl;

return0;

}

其他更好的答案:

ccf csp201409 1相鄰數對

問題描述 試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,...

201409 1 相鄰數對

試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好...

201409 1 相鄰數對

試題編號 201409 1 試題名稱 相鄰數對 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給定n個不同的整數,問這些數中有多少對整數,它們的值正好相差1。輸入格式 輸入的第一行包含乙個整數n,表示給定整數的個數。第二行包含所給定的n個整數。輸出格式 輸出乙個整數,表示值正好...