如何打亂乙個給定陣列?

2021-08-07 10:35:36 字數 1387 閱讀 5735

在程式開發過程中,有時候需要打亂一組給定的序列,而且每次請求打亂的結果還要求不一樣,比如在棋牌等遊戲中有這樣的需求。

首先,我們定義乙個待打亂的陣列:

int array[10] = ;

再定義乙個用於存放打亂後資料存放的陣列

int distrubary[10] = ;

#pragma once

#include

#include

using

namespace

std;

#pragma comment( lib, "winmm.lib" )

int main()

; //定義乙個陣列用來儲存打亂順序後的數

int idistrubary[isum] = ;

//播隨機種子(以便每次隨機的值有相等的機會)

srand(timegettime());

//每次隨機的不相同的數存到這個陣列裡(以便下次隨機時判斷隨機的數是否已經隨機過了)

int irandomdata[isum] = ;

//將irandomdata元數都賦初值為-1,表示沒有產生乙個隨機數

for (int i = 0; i1;

}//共產生不同的隨機的個數

int irandomsum = 0;

//打亂這個陣列

for (int i = 0; i//隨機乙個數

int irandom = rand() % isum;

//判斷irandomsum是否為0,是0的話表示沒有隨機過任何數,就不用查詢是否隨機到這個數了

if (irandomsum != 0)}}

//將產生的隨機數新增到randomdata裡面

irandomdata[irandomsum] = irandom;

//將隨機的數作為原來陣列的索引,取出原來陣列此索引的值儲存在打亂後的陣列中

idistrubary[irandomsum] = iary[irandom];

//將irandom加1,表明已經打亂好了乙個數

irandomsum++;

}//顯示未打亂的陣列

cout

<< "未打亂的陣列:";

for (int i = 0; icout

<< iary[i] << " ";

}cout

<< endl;

//顯示打亂後的陣列

cout

<< "打亂後的陣列:";

for (int i = 0; icout

<< idistrubary[i] << " ";

}cout

<< endl;

system("pause");

}

給定陣列使唯一的最小增量

1 描述 945 給定整數陣列 a,每次 move 操作將會選擇任意 a i 並將其遞增 1。返回使 a 中的每個值都是唯一的最少操作次數。示例 1 輸入 1,2,2 輸出 1 解釋 經過一次 move 操作,陣列將變為 1,2,3 示例 2 輸入 3,2,1,2,1,7 輸出 6 解釋 經過 6 ...

給定陣列,求改陣列中逆序對有多少個?

求陣列中的逆序對數,我們可以想到用歸併排序的方法,歸併排序具體是將兩個或者兩個以上的有序表合成新的有序表。假設我們現在有兩個有序的表 s 0,mid s mid 1,high 我們在合併這兩個表的時候需要比較這兩個表中元素的大小,假設 i 0,mid j mid 1,high 有s i s j 那麼...

給定資料段中找到第乙個有效bit實現 檔案系統

檔案系統中查詢,空閒inode時候需要用到 乙個每個檔案系統都有自己的實現 如minix 現在kernel中統一呼叫這個 static inline unsigned long find first zero bit le const void addr,unsigned long size 找到最...