最近寫專案**裡用到很多整數區間運算,呼叫頻率很高,想著網上有沒有好的封裝借鑑一下。奈何一頓搜尋猛如虎,合用封裝基本無。不如自己寫乙個了。
話不多說,直接上**,備註完善,測試可用。
#include
#include
#include
#define left(p) (p[0])
#define right(p) (p[1])
intmax
(int x,
int y)
intmin
(int x,
int y)
/** * @brief 判斷兩個整數區間是否重疊
* @param x 區間: [x[0], x[1]]
* @param y 區間: [y[0], y[1]]
* @return true 重疊; false 不重疊
*/bool overlap
(const
int* x,
const
int* y)
/** * @brief 交集(整數區間)
* @param x 區間: [x[0], x[1]]
* @param y 區間: [y[0], y[1]]
* @param is 所求交集
* @return true 有交集; false 無交集
*/bool intersection
(const
int* x,
const
int* y,
int* is)
return false;
}/**
* @brief 差集(整數區間): 屬於x但不屬於y 區間合法性由呼叫者保證
* @param x 區間: [x[0], x[1]]
* @param y 區間: [y[0], y[1]]
* @param ds 差集區間
* @param n 返回的差集數量
*/void
differenceset
(const
int* x,
const
int* y,
int ds[
2],int
* n)if(
right
(is)
<
right
(x))
}else
*n = c;
}/**
* @brief 集合運算(整數區間)
* 區間有效性由呼叫者保證: 有效區間 x 滿足 left(x) <= right(x)
*/int
main()
}
# 生成測試檔案 a.out
gcc interval.c
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 1 4
不相交差集: [5 9]
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 10 19
不相交差集: [5 9]
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 5 9
交集: [5 9]
差集為空(區間 y 包含區間 x)
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 5 6
交集: [5 6]
差集: [7 9]
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 6 9
交集: [6 9]
差集: [5 5]
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 4 10
交集: [5 9]
差集為空(區間 y 包含區間 x)
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 4 8
交集: [5 8]
差集: [9 9]
$ ./a.out
請輸入整數區間x: 5 9
請輸入整數區間y: 6 560
交集: [6 9]
差集: [5 5]
整數集合運算(過載)
編寫乙個程式,通過過載運算子 實現乙個整數集合的基本運算 1 int1 int2 兩個整數集合的並運算 2 int1 int2 兩個整數集合的差運算 輸入 5 2 5 66 1 79 32 66 28 結果 int1 int2 2 5 66 1 79 28 int1 int2 5 1 79 注 第1...
整數集合運算(過載)
編寫乙個程式,通過過載運算子 實現乙個整數集合的基本運算 1 int1 int2 兩個整數集合的並運算 2 int1 int2 兩個整數集合的差運算 輸入 5 2 5 66 1 79 32 66 28 結果 int1 int2 2 5 66 1 79 28 int1 int2 5 1 79 注 第1...
(C)順序表實現集合運算
1 用陣列a,b,c,e表示集合。假定a b e 輸入陣列a,b,e 全集 輸入資料時要求檢查資料是否重複 集合中的資料要求不重複 要求集合a,b是集合e的子集。2 兩個集合的並運算 把陣列a中各個元素先儲存在陣列c中。將陣列b中的元素逐一與陣列a中的元素進行比較,把不相同的元素新增到陣列c中,陣列...