在程式開發過程中,有時候需要打亂一組給定的序列,而且每次請求打亂的結果還要求不一樣,比如在棋牌等遊戲中有這樣的需求。
首先,我們定義乙個待打亂的陣列:
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 找到最...