解题思路:
这个思路是我参考了大佬的思路,只是大佬没给出代码,我就顺着大佬的思路做了下来。把两个数组合并排序:
1 3 2 6 5
4 8 7 9 0
得到 :0 1 2 3 4 5 6 7 8 9
把相邻的,且为来自两个不同数组的元素,相减求出距离,再选出最小距离。

注意事项:
1.思路很简单,需要四个数组,x[],y[],z[],set[]。
2.x,y存放题目所给数组,z存放混合后的数组,set对应当前元素所来自的数组,set[i]=1说明来自数组x,set[i]=2说明来自数组y。
3.利用快速排序对z[]及对应set进行排序。

参考代码:

  1. #include<iostream>
  2. using namespace std;
  3. void swap(int &a, int &b)
  4. {
  5. int tmp = a;
  6. a = b;
  7. b = tmp;
  8. }
  9. void QuickSort(int a[], int b[], int s, int e)
  10. {
  11. if (s >= e)
  12. return;
  13. int k = a[s];
  14. int i = s, j = e;
  15. while (i != j)
  16. {
  17. while (j > i&&a[j] >= k)
  18. j--;
  19. swap(a[i], a[j]);
  20. swap(b[i], b[j]);
  21. while (i < j&&a[i] <= k)
  22. i++;
  23. swap(a[i], a[j]);
  24. swap(b[i], b[j]);
  25. } //a[i]=k
  26. QuickSort(a, b, s, i - 1);
  27. QuickSort(a, b, i + 1, e);
  28. }
  29. int main()
  30. {
  31. int x[1001],y[1001],z[2001],set[2001];
  32. int m,n;
  33. cin>>m>>n;
  34. int i;
  35. for(i=0;i<m;i++)
  36. cin>>x[i];
  37. for(i=0;i<n;i++)
  38. cin>>y[i];
  39. for(i=0;i<m;i++)
  40. {
  41. z[i]=x[i];
  42. set[i]=1;
  43. }
  44. int j=0;
  45. for(;i<m+n;i++)
  46. {
  47. z[i]=y[j++];
  48. set[i]=2;
  49. }
  50. QuickSort(z,set,0,m+n-1);
  51. int min=1001;
  52. for(i=0;i<m+n;i++)
  53. {
  54. for(j=i+1;j<m+n;j++)
  55. {
  56. if(set[i]!=set[j])
  57. {
  58. if(z[j]-z[i]<min)
  59. min=z[j]-z[i];
  60. }
  61. }
  62. }
  63. cout<<min;
  64. return 0;
  65. }
点赞(0)
 

9.3 分

3 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论