牛客网初阶练习(5)

x33g5p2x  于2022-02-07 转载在 其他  
字(2.1k)|赞(0)|评价(0)|浏览(271)

1.争夺前五名

2.竞选社长

方法1:

方法2:

方法3:

方法4:

1.争夺前五名

学会自己设计排序算法和使用C语言提供的库函数排序算法

方法一:自己设计排序算法

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int arr[40] = { 0 };
  5. int n = 0;
  6. //输入
  7. scanf("%d", &n);
  8. for (int i = 0; i < n; i++)
  9. {
  10. scanf("%d", &arr[i]);
  11. }
  12. //排序
  13. for (int i = 0; i < n-1; i++)
  14. {
  15. for (int j = 0; j < n - i - 1; j++)
  16. {
  17. if (arr[j] < arr[j + 1])
  18. {
  19. int temp = arr[j];
  20. arr[j] = arr[j + 1];
  21. arr[j + 1] = temp;
  22. }
  23. }
  24. }
  25. //输出
  26. for (int i = 0; i < 5; i++)
  27. {
  28. printf("%d ", arr[i]);
  29. }
  30. return 0;
  31. }

方法二:使用系统自带的排序算法

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int cmp_int(const void* e1, const void* e2)
  4. {
  5. return *(int*)e2 - *(int*)e1;
  6. }
  7. int main()
  8. {
  9. int arr[40] = { 0 };
  10. int n = 0;
  11. //输入
  12. scanf("%d", &n);
  13. for (int i = 0; i < n; i++)
  14. {
  15. scanf("%d", &arr[i]);
  16. }
  17. //排序
  18. qsort(arr, n, 4, cmp_int);
  19. //输出
  20. for (int i = 0; i < 5; i++)
  21. {
  22. printf("%d ", arr[i]);
  23. }
  24. return 0;
  25. }

此处需要了解有关于qsort 排序函数的应用


 qsort()函数中四个参数的意义为:(目标数组的开始位置(如果从第一个开始。可直接写数组名)、要排序的数组的元素的个数、每个元素所占的字节数、比较函数)

比较函数:

e1在前时是升序,e1在后时是降序。

2.竞选社长

方法1:

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char arr[500] = { 0 };
  5. int i = 0;
  6. int A_num = 0;
  7. int B_num = 0;
  8. scanf("%s", &arr);
  9. int len = strlen(arr)-1;
  10. for (i = 0; i < len; i++)
  11. {
  12. if (arr[i] == 'A')
  13. {
  14. A_num++;
  15. }
  16. else
  17. {
  18. B_num++;
  19. }
  20. }
  21. if (A_num > B_num)
  22. {
  23. printf("A");
  24. }
  25. else if (A_num < B_num)
  26. {
  27. printf("B");
  28. }
  29. else
  30. {
  31. printf("E");
  32. }
  33. return 0;
  34. }

方法2:

(用了gets函数)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char arr[100] = { 0 };
  5. int count_A = 0;
  6. int count_B = 0;
  7. int i = 0;
  8. gets(arr);
  9. while (arr[i] != '0')
  10. {
  11. if ('A' == arr[i])
  12. {
  13. count_A++;
  14. }
  15. else
  16. {
  17. count_B++;
  18. }
  19. i++;
  20. }
  21. if (count_A > count_B)
  22. {
  23. printf("A");
  24. }
  25. else if (count_A < count_B)
  26. {
  27. printf("B");
  28. }
  29. else
  30. {
  31. printf("E");
  32. }
  33. return 0;
  34. }

方法3:

(只定义一个变量flag,如果为A,flag++,如果为B,flag--,然后用flag与0的大小进行判断)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. char arr[100] = { 0 };
  5. int flag = 0;
  6. int i = 0;
  7. gets(arr);
  8. while (arr[i] != '0')
  9. {
  10. if ('A' == arr[i])
  11. {
  12. flag++;
  13. }
  14. else
  15. {
  16. flag--;
  17. }
  18. i++;
  19. }
  20. if (flag>0)
  21. {
  22. printf("A");
  23. }
  24. else if (flag<0)
  25. {
  26. printf("B");
  27. }
  28. else
  29. {
  30. printf("E");
  31. }
  32. return 0;
  33. }

方法4:

(用getchar()函数进行一个个获取进行判定)

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int ch = 0;
  5. int flag = 0;
  6. while ((ch=getchar()) != '0' && ch != EOF)
  7. {
  8. if ('A' == ch)
  9. {
  10. flag++;
  11. }
  12. else if ('B' == ch)
  13. {
  14. flag--;
  15. }
  16. }
  17. if (flag > 0)
  18. {
  19. printf("A");
  20. }
  21. else if (flag < 0)
  22. {
  23. printf("B");
  24. }
  25. else
  26. {
  27. printf("E");
  28. }
  29. return 0;
  30. }

相关文章