查詢集合中最接近某個數的數

2021-09-02 02:39:51 字數 1205 閱讀 1287

查詢集合中最接近某個數的數

/*★實驗任務

給你乙個集合,一開始是個空集,有如下兩種操作:

向集合中插入乙個元素。

詢問集合中最接近某個數的數是多少。

★資料輸入

輸入第一行為乙個正整數 n,表示共有 n 個操作。

接下來 n 行,每行乙個操作。

對於第乙個操作,輸入格式為 1 x,表示往集合裡插入乙個值為 x 的元素。

對於第二個操作,輸入格式為 2 x,表示詢問集合中最接近 x 的元素是什麼。

1<=n<=100000,1<=x<=1000000000。

★資料輸出

對於所有的第二個操作,輸出乙個或者兩個整數,表示最接近 x 的元素,有

兩個數的情況,按照公升序輸出,並用乙個空格隔開。

如果集合為空,輸出一行「empty!」

資料保證插入的元素兩兩不同。

輸入示例 輸出示例

5 empty!

2 1 2

1 2 2 4

2 31 4

2 3*/

解題思路

二、當集合為空時,輸出「empty!」;當集合中只有乙個元素時,直接輸出該元素。

三、下面重點看一般的情況。

1.先查詢集合中是否有查詢的元素,有則輸出該元素

2.沒有的話,將該元素先插入集合中,再查詢該元素處於集合的某個位置。

若該元素在集合的首位,則輸出該數的下一位。

若該元素在集合的末位,則輸出該數的上一位。

否則,判斷它左右元素的值與它的差的絕對值,輸出差的絕對值較小的那個元素。若相等,則同時輸出。

#include

#include

#include

using

namespace std;

map <

long

long

,int

> a;

intmain()

a[x]=1

; it=a.

find

(x);

if(it == a.

begin()

)else

if(it == a.

end())

else

a.erase

(a.find

(x));}

}}}return0;

}

最接近的數

有乙個正整數,請找出其二進位制表示中1的個數相同 且大小最接近的那兩個數。乙個略大,乙個略小 給定正整數int x,請返回乙個vector,代表所求的兩個數 小的在前 保證答案存在。測試樣例 2 返回 1,4 思路 以給出的數為基礎,先將給出的數的二進位制中有幾個1判斷出來,然後再分別判別當前數左邊...

如何在乙個集合中取乙個最接近某個數的數

問題場景 思路 有彩蛋哦 今天同事問了乙個問題,如何在乙個集合中取乙個最接近某個數的數,腦海各種演算法 揹包,圖論,動態規劃 在飄,讓我回想起了大二acm演算法競賽期間的生活。acm真的是讓我又愛又恨 愛,當你掌握一種演算法ac出題目的時候是真的爽 恨,演算法是真的難理解 當時還想著打遊戲,打籃球,...

數字的最接近查詢

提出問題,有乙個數字列value,任意輸入乙個數字x,要求查詢最接近x的那個value的值,有可能個大於x也有可能小於x。例如查詢value最接近2.15的value所在的行 實現 create table t value decimal 12,4 insert into t select 2.1 ...