C 實現在陣列中插入1 100的隨機數

2021-06-18 14:17:20 字數 1522 閱讀 1835

面試原題:實現填充1-100到乙個容器為100的陣列中,不能重複,陣列只可以定義乙個。

這是我上半年面試時遇到的一道題,當時第一次遇到就做出來,很有成就感,面試官現場給了我五分鐘 ,花了三分鐘想出來描述給他聽。不過前些時候學linq又遇到了一種方法,下午正好有空整理了下(國慶來臨,除了開會的別的基本都提前走了,辦公室就幾個人,也都不幹活了)。

方法一:

思想:先將陣列按順序從1到100填充,然後對下標進行隨機抽取互換。例如第一次在0-98中選乙個隨機 數作為下標,將陣列這個下標的值跟下標為99的互換,於是第100數則為隨機數;第二次在0-97中選乙個 隨機數作為下標,將陣列這個下標的值跟下標為98的互換,於是第99數則為隨機數,最後兩個位置的數 就都是隨機數;以此規律迴圈,直到最後所有的都是隨機數。**如下:

const int n = 100;

int array = new int[n];

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

for (int j = 1; j < n; j++)

方法二:

思想:運用linq,首先生成1-100的整數序列,然後根據隨機數排序;

**只有兩句,如下:

int array = new int[n];

array = enumerable.range(1, n)

.orderby(n => (new random(n).next()))

.toarray();

方法一附帶了兩種不需要第三個變數互換值的方法,在寫例子時由於邊界沒考慮全面,當array[n - j]和array[randomindex]為同乙個變數時,導致另外兩個互換值的方法失效如下:

//second method

//array[n - j] = array[n - j] ^ array[randomindex];

//array[randomindex] = array[n - j] ^ array[randomindex];

//array[n - j] = array[n - j] ^ array[randomindex];

當下標一樣時,array[n - j]和array[randomindex]為同乙個變數,第一行為0,同時array[n - j]值本身都變成了0,所以只要相等時,互換變數就都變成了0;另一種也差不多,如下:

//third method

//array[n - j] = array[n - j] + array[randomindex];

//array[randomindex] = array[n - j] - array[randomindex];

//array[n - j] = array[n - j] - array[randomindex];

看第二行,如果兩個是同乙個變數,值相減就會變為0,第三行就是0-0還是0;由於我知道思想,自以為一會兒就寫出來的,說明知道和寫出來還是有差距的,平時還是要多寫程式的。希望能對大家有幫助。

C語言實現在陣列A上有序合併陣列B的方法

題目 陣列a和陣列b均有序,陣列a有足夠大記憶體來容納陣列b,將陣列b有序合併到陣列a中 分析 如果由前至後合併,複雜度將會是o n2 這樣的複雜度顯然不是最優解,利用兩個指標指向兩個陣列的尾部,從後往前遍歷,這樣的複雜度為o n2 由此可以寫出下面的 include include include...

shell 判斷字串是否存在陣列中的實現示例

語法格式 字串 示例 bin sh 陣列 array address base capkyblmrt company store 1 如果存在,輸出 1 exists,1 如果不程式設計客棧存在,輸出 1 not exists if 1 null the if then echo 1 exists ...

C語言 陣列中的插入排序法!

c語言中有很多排序的方法,這次我先介紹一下插入排序法。首先我們要知道對一些數字進行排序一般都是用迴圈來實現,插入排序也不例外。插入排序有乙個要求就是 我要插入的位置前面的數字都必須是公升序才可以,如果前面只有乙個數字,那麼我們就不需要考慮是否為公升序,所以我們迴圈開始的地方為第二個數字,也就是陣列中...