兩陣列的問題

2021-09-08 21:03:15 字數 3743 閱讀 5764

兩陣列的問題? delphi / windows sdk/api

問題1:找出兩陣列的不同數和共有數的值和位置,和同值同位置的值存入陣列s1……s9  

如:  

陣列值r1為  

陣列值r2為  

需要找出:  

陣列值r1不同數的值:           s1    

陣列值r1不同數的位置:       s2    

陣列值r2不同數的值:           s3    

陣列值r2不同數的位置:       s4    

兩陣列共有數的值:               s5    

兩陣列共有數r1的位置:       s6    

兩陣列共有數r1的位置:       s7    

兩陣列同值同位置的值:       s8    

兩陣列同值同位置的位置:   s9    

注意:實際應用中是動態陣列,而且還很大,需要乙個精簡的辦法!!  

問題2:把陣列按數值從小到大排列。同上注意!!!

var  

r1:   array   of   integer;  

r2:   array   of   integer;  

sl1:   tstringlist;  

sl2:   tstringlist;  

idx:   integer;  

index:   integer;  

s1:   array   of   integer;  

s2:   array   of   integer;  

s3:   array   of   integer;  

s4:   array   of   integer;  

s5:   array   of   integer;  

s6:   array   of   integer;  

s7:   array   of   integer;  

s8:   array   of   integer;  

s9:   array   of   integer;  

begin  

setlength(r1,   10);  

setlength(r2,   9);  

r1[0]   :=   1;  

r1[1]   :=   6;  

r1[2]   :=   23;  

r1[3]   :=   15;  

r1[4]   :=   5;  

r1[5]   :=   28;  

r1[6]   :=   8;  

r1[7]   :=   11;  

r1[8]   :=   10;  

r1[9]   :=   19;  

r2[0]   :=   2;  

r2[1]   :=   23;  

r2[2]   :=   4;  

r2[3]   :=   15;  

r2[4]   :=   5;  

r2[5]   :=   17;  

r2[6]   :=   12;  

r2[7]   :=   11;  

r2[8]   :=   3;  

sl1   :=   tstringlist.create;  

sl2   :=   tstringlist.create;  

//'%.8d'的目的有2個,  

//其一是排序,   其二是滿足大資料  

for   idx   :=   low(r1)   to   high(r1)   do  

sl1.add(format('%.8d',   [r1[idx]]));  

for   idx   :=   low(r2)   to   high(r2)   do  

sl2.add(format('%.8d',   [r2[idx]]));  

//為了顯示方便,我用了listbox.  

//在你的實際程式中你可以用tstringlist來代替.  

listbox1.sorted   :=   true;  

listbox2.sorted   :=   true;  

listbox3.sorted   :=   true;  

listbox4.sorted   :=   true;  

listbox5.sorted   :=   true;  

listbox6.sorted   :=   true;  

listbox7.sorted   :=   true;  

listbox8.sorted   :=   true;  

listbox9.sorted   :=   true;  

for   idx   :=   0   to   pred(sl1.count)   do      

begin  

index   :=   sl2.indexof(sl1[idx]);  

if   index   <   0   then  

begin  

listbox1.items.add(sl1[idx]);  

listbox2.items.add(format('%.8d',   [idx]));  

end   else  

begin  

listbox5.items.add(sl1[idx]);  

listbox6.items.add(format('%.8d',   [idx]));  

listbox7.items.add(format('%.8d',   [index]));  

if   idx   =   index   then  

begin  

listbox8.items.add(sl1[idx]);  

listbox9.items.add(format('%.8d',   [idx]));  

end;  

end;  

end;  

for   idx   :=   0   to   pred(sl2.count)   do  

begin  

if   sl1.indexof(sl2[idx])   <   0   then  

begin  

listbox3.items.add(sl2[idx]);  

listbox4.items.add(format('%.8d',   [idx]));  

end;  

end;  

//剩下的工作就是把listbox   --->   s陣列,  

//我只寫乙個,其餘的照葫蘆畫瓢}  

setlength(s1,   listbox1.items.count);  

for   idx   :=   0   to   pred(listbox1.items.count)   do  

s1[idx]   :=   strtoint(listbox1.items[idx]);  

//上面演算法的前提  

//1、是每個陣列自身沒有重複數  

//2.   r1的長度大於等於r2的長度  

//如要滿足任何條件,演算法基本沒有大的變化,   只是多了乙個遍歷  

end;

兩陣列的交 和 兩陣列的交

題目描述 計算兩個陣列的交 解題思路 這兩個題我放在一起了,只要會兩個陣列的交就行了,兩個陣列的交 幾乎一樣,就是刪了一點 先分別對兩個陣列排序,然後分別比較兩個陣列的元素,如果有相同的元素插入到新的陣列裡,將這個數儲存起來,用於後面去掉重的元素,如果兩個元素不一樣,繼續比較剩下的元素。兩個陣列的交...

兩陣列的交

返回兩個陣列的交 樣例nums1 1,2,2,1 nums2 2,2 返回 2 先排序,從nums1陣列中取數判斷時,若nums1 i nums2 j 才繼續遍歷nums2,並用乙個k值記錄nums2中比nums1 i 1 小的最大數的角標,下次判斷nums i 時nums2從k值開始取。class...

兩陣列的交

一 問題描述 返回兩個陣列的交 注意事項 樣例nums1 1,2,2,1 nums2 2,2 返回 2 二 解題思路運用set intersection函式很容易求出兩陣列的交集,要注意使用這個函式時引數怎麼樣寫,還有就是inserter函式,要注意裡面的引數,第乙個是要插入的內容,第二個是插入的位...