• c语言:解决数组有关的删除,排序,合并等问题。


    题目1:判断数组是否有序(升序或者降序)


     

    思路和代码:

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. int main()
    4. {
    5. int a = 0;
    6. scanf("%d", &a);
    7. int arr[50];
    8. int flag1 = 0;//是降序
    9. int flag2 = 0;//是升序
    10. for (int i = 0; i < a; i++)
    11. {
    12. scanf("%d", &arr[i]);
    13. if (i > 0)
    14. {
    15. if (arr[i] >= arr[i - 1])//如果存在降序
    16. {
    17. flag1 = 1;//降序赋值为1
    18. }
    19. if (arr[i] < arr[i - 1])//如果存在升序
    20. {
    21. flag2 = 1;//升序赋值为1
    22. }
    23. }
    24. }
    25. if (flag1 + flag2 == 1)//满足升序或者降序其中一个就是有序数组
    26. {
    27. printf("sorted\n");
    28. }
    29. else//反之不是
    30. {
    31. printf("unsorted\n");
    32. }
    33. }

    题目2:去除数组中重复的数字 

    思路和代码: 

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. int main()
    4. {
    5. int a = 0;
    6. scanf("%d", &a);
    7. int arr[1000];
    8. //读取
    9. for (int i = 0; i < a; i++)
    10. {
    11. scanf("%d", &arr[i]);
    12. }
    13. //去重
    14. for (int i = 0; i < a; i++)
    15. {
    16. int j = 0;
    17. for (j = i + 1; j < a; j++)//从下一个元素开始找
    18. {
    19. if (arr[i] == arr[j])//重复
    20. {
    21. //去重,后面元素往前覆盖
    22. int k = 0;
    23. for (k = j; k < a - 1; k++)
    24. {
    25. arr[k] = arr[k + 1];//因为最大到a,所以k+1
    26. }
    27. a--;//数组个数减少一个
    28. j--;下标回退,重新判断后面有没有重复的
    29. }
    30. }
    31. }
    32. for (int i = 0; i < a; i++)
    33. {
    34. printf("%d ", arr[i]);
    35. }
    36. return 0;
    37. }

    题目3:合并,排序两个有序数组,并打印 

    思路和代码: 

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include
    3. int main()
    4. {
    5. int n = 0;
    6. int m = 0;
    7. //创建两个数组
    8. int arr1[100] = { 0 };
    9. int arr2[100] = { 0 };
    10. //传入两个数组的元素个数
    11. scanf("%d %d", &n, &m);
    12. int i = 0;
    13. //输入数组1
    14. for (i = 0; i < n; i++)
    15. {
    16. scanf("%d", &arr1[i]);
    17. }
    18. //输入数组2
    19. for (i = 0; i < m; i++)
    20. {
    21. scanf("%d", &arr2[i]);
    22. }
    23. //
    24. int j = 0;
    25. i = 0;
    26. //合并
    27. while (i < n && j < m)
    28. {
    29. if (arr1[i] < arr2[j])//哪个数组元素小先打印谁
    30. {
    31. printf("%d ", arr1[i]);
    32. i++;
    33. }
    34. else
    35. {
    36. printf("%d ", arr2[j]);
    37. j++;
    38. }
    39. }
    40. if (i == n)//相等都打印一次
    41. {
    42. for (; j < m; j++)
    43. {
    44. printf("%d ", arr2[j]);
    45. }
    46. }
    47. else
    48. {
    49. for (; i < n; i++)
    50. {
    51. printf("%d ", arr1[i]);
    52. }
    53. }
    54. return 0;
    55. }

  • 相关阅读:
    CNM:MERGE INTO
    Flink双流join导致数据重复
    预训练模型分词方式
    gcc编译器和gdb调试工具
    Go工作空间
    智慧灯杆网关智慧交通应用
    哪些人群在报考浙大工程管理硕士(MEM)?
    汇编攻城记-算术运算ADD/SUB/RSB/ADC/SBC/RSC
    检测Nginx配置是否正确
    混凝土板材及砌块生产线数字孪生可视化管理系统,实现智慧工厂车间智能化数字化管理
  • 原文地址:https://blog.csdn.net/2303_80025768/article/details/134491000