每日一道演算法題 判斷5個數值是否連續相鄰

2021-06-26 22:03:00 字數 1030 閱讀 5372

乙個整數數列,元素取值可能是0~65535中的任意乙個數,相同數值不會重複出現。0是例外,可以反覆出現。

請設計乙個程式:

(1)隨機選取 5 個數值;

(2)判斷這 5 個數值是否連續相鄰。

注意:(1)5 個數值允許是亂序的。比如:8  7  5  0  6

(2)0 可以通配任意數值。比如:8  7  5  0  6  中的 0 可以通配成 9 或者 4

(3)0 可以多次出現

解題思路:考慮一下三種情況:(1)5 個數值中沒有 0 出現,要想這 5 個數連續,先假設從小到大將它們排序,那麼最大數減去最小數的值為 4 ;

(2)5 個數值中全部為 0 ,根據題目意思,5 個 0 也是連續的;

(3)5 個數值中出現 0 的個數 為 1 到 4 個,那麼只需這 5 個整數中最大值減去最小值的值小於 4 就行,其中 4 個 0 時,最大值和最小值為同乙個數。

綜合上面的三種情況,不管有沒有 0 出現,只需 5 個整數中最大值和最小值的差值 <= 4即可。具體c++**如下:

#include using namespace std;

bool if_sequence(int* arr, int n)

} if (max - min > n - 1) return false;

else return true;

}int main();

for (int i = 0; i < 5; i++)

if (flag == 1)

}for (int j = 0; j < 5; j++)

cout << endl;

bool result = if_sequence(array, sizeof(array) / sizeof(int));

if (result == true)

else

cout << endl;

system("pause");

return 0;

}

每日一道演算法題

no.1 設指標變數fron t表示鏈式佇列的隊頭指標,指標變數rear表示鏈式佇列的隊尾指標,指標變數s指向將要入佇列的結點x,則入佇列的操作序列為 a.front next s front s b.s next rear rear s crear next s rear s d.s next f...

每日一道演算法題

no.1 若有 18 個元素的有序表存放在一維陣列 a 19 中,第乙個元素放 a 1 中,現進行二分查詢,則查詢 a 3 的比較序列的下標依次為 a.1,2,3 b.9,5,2,3 c.9,5,3 d.9,4,2,3 答案 d.第一次查詢,隊首為下標1,隊尾下標18,所以是 1 18 2 9 第二...

每日一道演算法題 TwoSum

167.給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可...