日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蓝桥杯_算法训练_ALGO10_集合运算

發布時間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蓝桥杯_算法训练_ALGO10_集合运算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  這個題實際上思路是比較簡單的,但是需要注意細節問題。

  思路:讀入數組之后進行排序,然后再求交、并、補集。

  首先排序:(使用的是冒泡排序)

1 #include<iostream> 2 using namespace std; 3 int result1[1000]; 4 int result2[2000]; 5 int result3[1000]; 6 int k1 = 0; 7 int k2 = 0; 8 int k3 = 0; 9 void swap(int *a,int *b) 10 { 11 int temp = *a; 12 *a = *b; 13 *b = temp; 14 } 15 void sort(int a[],int n) 16 { 17 for(int i = 0; i < n; i++) 18 { 19 for(int j = 1; j < n-i; j++) 20 { 21 if(a[j]<a[j-1]) 22 swap(&a[j],&a[j-1]); 23 } 24 } 25 }

求交集:思路是將兩個數組元素進行比較,如果有相同元素,就放到result1數組(結果數組)中。

代碼如下:

1 void intersection(int a[],int b[],int n,int m)//求交集 2 { 3 int i = 0,j = 0; 4 while(1) 5 { 6 if(i==n||j==m) break; 7 else 8 { 9 if(a[i]<b[j]) 10 { 11 i++; 12 } 13 else if(a[i]==b[j]) 14 { 15 result1[k1++] = a[i]; 16 i++; 17 j++; 18 } 19 else 20 { 21 j++; 22 } 23 } 24 } 25 }

這個是對上面代碼的簡單解釋。可能有點不清楚,如果大家有更好的思路,歡迎評論提出。

其實知道了交集的做法之后,并集和補集也就很清楚了。

并集:

1 void unions(int a[],int b[],int n,int m)//求并集 2 { 3 int i=0,j=0; 4 k2 = 0; 5 while(1) 6 { 7 if(i==n||j==m) break;//有一個數組結束,循環就結束 8 else 9 { 10 if(a[i]<b[j]) //遇到小的直接放入,因為我們本身就是從小到大過數組的,此時只移一個指針 11 { 12 result2[k2++] = a[i]; 13 i++; 14 } 15 else if(a[i]==b[j])//如果相等,我們只需要放一個就可以,兩個數組指針同時后移 16 { 17 result2[k2++] = a[i]; 18 i++; 19 j++; 20 } 21 else 22 { 23 result2[k2++] = b[j]; 24 j++; 25 } 26 } 27 } 28 if(i<n)//因為存在數組長度不等的情況,我們需要再做別的操作。此時已經不需要比較 29 { 30 while(i!=n) 31 { 32 result2[k2++] = a[i]; 33 i++; 34 } 35 } 36 if(j<m)//同上 37 { 38 while(j!=m) 39 { 40 result2[k2++] = b[j]; 41 j++; 42 } 43 } 44 }

補集:

1 void complement(int a[],int n)//求b相對于a的補集 2 { 3 int i = 0; 4 int j = 0; 5 k3 = 0; 6 while(j<k1&&i<n)//二者缺一不可 7 { 8 if(a[i]!=result1[j]) 9 { 10 if(a[i]>result1[j])//自己測試的時候可能一個數組中有相同的元素,所以加了這個判斷,不過題目似乎不用 11 { 12 j++; 13 } 14 else 15 { 16 result3[k3] = a[i]; 17 k3++; 18 i++; 19 } 20 } 21 else 22 { 23 i++; 24 } 25 } 26 while(i<n) 27 { 28 result3[k3++] = a[i]; 29 i++; 30 } 31 }

我在補集的時候,判斷條件起初只寫了一個j<k1,然后運行結果錯誤,后來發現問題,加以改正。

?不足之處希望大家提出來,一起學習。個人覺得可能思路或者代碼還是冗余比較多,不是那么精煉,求大神教!

《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的蓝桥杯_算法训练_ALGO10_集合运算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。