牛客网初阶练习(9)

x33g5p2x  于2022-02-12 转载在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(197)

1.序列中删除指定的数字

2.序列中整数去重

方法1:

方法2:

3.有序序列合并

1.序列中删除指定的数字

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n = 0;
  5. int arr[50] = { 0 };
  6. int delete = 0;
  7. scanf("%d", &n);
  8. for (int i = 0; i < n; i++)
  9. {
  10. scanf("%d", &arr[i]);
  11. }
  12. scanf("%d", &delete);
  13. int i = 0;
  14. int j = 0;
  15. for (i = 0, j = 0; i < n; i++)
  16. {//i的作用:遍历数组
  17. //j的作用:记录存放数据位置的下标
  18. if (arr[i] != delete)
  19. {
  20. arr[j++] = arr[i];
  21. }
  22. //此时的j中存放的数据就是删除元素后剩下的元素个数
  23. }
  24. for (int i = 0; i < j; i++)
  25. {
  26. printf("%d ", arr[i]);
  27. }
  28. return 0;
  29. }

 2.序列中整数去重

方法1:

(与前面的元素进行比较)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n = 0;
  5. int arr[1000] = { 0 };
  6. scanf("%d", &n);
  7. int i = 0;
  8. int j = 0;
  9. for (i = 0; i < n; i++)
  10. {
  11. scanf("%d", &arr[i]);
  12. }
  13. //去重
  14. j = 1;
  15. for (i = 1; i < n; i++)//从第二个开始进行遍历
  16. {
  17. int flag = 0;
  18. for (int k = 0; k < i; k++)
  19. {
  20. if (arr[k] == arr[i])
  21. {
  22. flag = 1;
  23. }
  24. }
  25. if (flag != 1)
  26. {
  27. arr[j++] = arr[i];
  28. }//此处的方法类似于上面那个题的方法
  29. }
  30. for (int i = 0; i < j; i++)
  31. {
  32. printf("%d ", arr[i]);
  33. }
  34. return 0;
  35. }

方法2:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n = 0;
  5. int arr[1000] = { 0 };
  6. scanf("%d", &n);
  7. int i = 0;
  8. int j = 0;
  9. for (i = 0; i < n; i++)
  10. {
  11. scanf("%d", &arr[i]);
  12. }
  13. //去重
  14. for (i = 0; i < n; i++)
  15. {
  16. //判断arr[i]是否在后面出现过
  17. int j = 0;
  18. for (j = i + 1; j < n; j++)
  19. {
  20. if (arr[i] == arr[j])
  21. {
  22. //去重,即后面的元素向前面进行覆盖
  23. int k = 0;
  24. for (k = j; k < n - 1; k++)
  25. {
  26. arr[k] = arr[k + 1];
  27. }
  28. n--;
  29. j--;//防止覆盖上来的仍然与前面的arr[i]元素重复
  30. }
  31. }
  32. }
  33. for (int i = 0; i < n; i++)
  34. {
  35. printf("%d ", arr[i]);
  36. }
  37. return 0;
  38. }

3.有序序列合并

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. int main()
  4. {
  5. int n = 0;
  6. int m = 0;
  7. int all = m+n;
  8. int i = 0;
  9. //输入n和m
  10. scanf("%d %d",&n,&m);
  11. int *arr1 = (int *)malloc(sizeof(int)*n);
  12. int *arr2 = (int *)malloc(sizeof(int)*m);
  13. int *arr3 = (int *)malloc(sizeof(int)*(m+n));
  14. //输入两个有序数组
  15. for(int i = 0;i<n;i++)
  16. {
  17. scanf("%d",&arr1[i]);
  18. }
  19. for(int i = 0;i<m;i++)
  20. {
  21. scanf("%d",&arr2[i]);
  22. }
  23. //合并数组
  24. i = 0;
  25. int j = 0;
  26. int k = 0;
  27. while(i<n&&j<m)
  28. {
  29. if(arr1[i]<arr2[j])
  30. {
  31. arr3[k++] = arr1[i++];
  32. }
  33. else
  34. {
  35. arr3[k++] = arr2[j++];
  36. }
  37. }
  38. if(i==n)
  39. {
  40. for(;j<m;j++)
  41. {
  42. arr3[k++] = arr2[j];
  43. }
  44. }
  45. else
  46. {
  47. for(;i<n;i++)
  48. {
  49. arr3[k++] = arr1[i];
  50. }
  51. }
  52. for( i =0;i<k;i++)
  53. {
  54. printf("%d ",arr3[i]);
  55. }
  56. return 0;
  57. }

相关文章