牛客网初阶练习(终篇)

x33g5p2x  于2022-02-16 转载在 其他  
字(2.0k)|赞(0)|评价(0)|浏览(191)

1.小乐乐与字符串

2.KiKi去重整数并排序

方法一:

方法二:

35.KiKi学结构体和指针

1.小乐乐与字符串

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char arr[8000] = {0};
  5. scanf("%s",arr);
  6. long c = 0;
  7. long ch = 0;
  8. long chn = 0;
  9. char *p = arr;
  10. while(*p!='\0')
  11. {
  12. if(*p=='C')
  13. {
  14. c++;
  15. }
  16. else if(*p=='H')
  17. {
  18. ch+=c;
  19. }
  20. else if(*p=='N')
  21. {
  22. chn+=ch;
  23. }
  24. p++;
  25. }
  26. printf("%lld",chn);
  27. return 0;
  28. }

2.KiKi去重整数并排序

方法一:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int n = 0;
  5. int arr[1001] = {0};
  6. int tmp = 0;
  7. scanf("%d",&n);
  8. for(int i = 0;i<n;i++)
  9. {
  10. scanf("%d",&tmp);
  11. arr[tmp] = tmp;
  12. }
  13. for(int i = 0;i<1001;i++)
  14. {
  15. if(arr[i]!=0)
  16. {
  17. printf("%d ",arr[i]);
  18. }
  19. }
  20. return 0;
  21. }

方法二:

  1. #include<stdio.h>
  2. void bubble_sort(int arr[], int n)
  3. {
  4. for (int i = 0; i < n - 1; i++)
  5. {
  6. for (int j = 0; j < n - i - 1; j++)
  7. {
  8. if (arr[j] > arr[j + 1])
  9. {
  10. int temp = arr[j];
  11. arr[j] = arr[j + 1];
  12. arr[j + 1] = temp;
  13. }
  14. }
  15. }
  16. }
  17. int main()
  18. {
  19. int arr[1000] = { 0 };
  20. int n = 0;
  21. scanf("%d", &n);
  22. int i = 0;
  23. for (i = 0; i < n; i++)
  24. {
  25. scanf("%d", &arr[i]);
  26. }
  27. bubble_sort(arr, n);
  28. for (i = 0; i < n - 1; i++)
  29. {
  30. if (arr[i] == arr[i + 1])
  31. {
  32. int k = 0;
  33. for (k = i; k < n - 1; k++)
  34. {
  35. arr[k] = arr[k + 1];
  36. }
  37. n--;
  38. i--;
  39. }
  40. }
  41. for (i = 0; i < n; i++)
  42. {
  43. printf("%d ", arr[i]);
  44. }
  45. return 0;
  46. }

35.KiKi学结构体和指针

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. struct Node
  4. {
  5. int num;
  6. struct Node* next;
  7. };
  8. int main()
  9. {
  10. int n = 0;
  11. scanf("%d",&n);
  12. int i = 0;
  13. int m = 0;
  14. int d = 0;//要删除的元素
  15. struct Node* list = NULL;//指向链表的指针
  16. struct Node* tail=NULL;//指向链表尾部元素的指针
  17. for(i = 0;i<n;i++)
  18. {
  19. scanf("%d",&m);
  20. struct Node*pn = (struct Node*)malloc(sizeof(struct Node));
  21. pn->num = m;
  22. pn->next = NULL;
  23. if(list==NULL)
  24. {
  25. list = pn;
  26. tail = pn;
  27. }
  28. else
  29. {
  30. tail->next = pn;
  31. tail = pn;
  32. }
  33. }
  34. //接收要删除的元素
  35. scanf("%d",&d);
  36. //删除列表中指定的元素
  37. struct Node* cur = list;
  38. struct Node* prev = NULL;
  39. while(cur)
  40. {
  41. if(cur->num==d)
  42. {
  43. //删除
  44. struct Node*pd = cur;
  45. if(cur==list)
  46. {
  47. list = list->next;
  48. cur = list;
  49. }
  50. else
  51. {
  52. prev->next = cur->next;
  53. cur = prev->next;
  54. }
  55. free(pd);
  56. n--;
  57. }
  58. else
  59. {
  60. prev = cur;
  61. cur = cur->next;
  62. }
  63. }
  64. //
  65. printf("%d\n",n);
  66. cur = list;
  67. while(cur)
  68. {
  69. printf("%d ",cur->num);
  70. cur = cur->next;
  71. }
  72. //释放单链表
  73. cur = list;
  74. struct Node*del = NULL;
  75. while(cur)
  76. {
  77. del = cur;
  78. cur = cur->next;
  79. free(del);
  80. }
  81. list = NULL;
  82. return 0;
  83. }

相关文章