查看原文
其他

C语言每日一练(006)

题目

在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。如序列3,1,2,1,5,1,2。其中1就出现3次,2出现2次,3出现1次,5出现1次。要求对于给定的正整数序列,从小到大依次输出序列中出现的数及出现的次数。

数据约定

n<=1000; 0<x<1000000

输入

第一行正整数n,表示给定序列中正整数的个数。第二行是n个用空格隔开的正整数x,代表给定的序列。

输出

若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数第二个是该数在序列中出现的次数。

样例输入

12
8 2 8 2 2 11 1 1 8 1 13 13

样例输出

1 3

2 3

8 3

11 1

13 2

代码

首先,从控制台输入数据保存到目标数组中;其次给目标数组元素进行从小到大排序;最后再进行数据统计。

  1. /*******************************************************************************************************

  2. ** 题 目: 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。如序列3,1,2,1,5,1,2。

  3. 其中1就出现3次,2出现2次,3出现1次,5出现1次。要求对于给定的正整数序列,从小到大

  4. 依次输出序列中出现的数及出现的次数。

  5. ** 数据约定:n<=1000; 0<x<1000000.

  6. ** 输 入: 第一行正整数n,表示给定序列中正整数的个数。

  7. 第二行是n个用空格隔开的正整数x,代表给定的序列。

  8. ** 输 出: 若干行,每行两个用一个空格隔开的数,第一个是数列中出现的数

  9. 第二个是该数在序列中出现的次数。

  10. ** 样例输入:12

  11. 8 2 8 2 2 11 1 1 8 1 13 13

  12. ** 样例输出:1 3

  13. 2 3

  14. 8 3

  15. 11 1

  16. 13 2

  17. ********************************************************************************************************/

  18. #include <stdio.h>

  19. #include <string.h>



  20. void swap(int *array, int i, int j);

  21. void BubbleSortSmallToBig(int *array, int len); // O(n*n)


  22. // 主函数

  23. int main(void)

  24. {

  25. // 数据输入

  26. int n;

  27. scanf("%d", &n);


  28. int arr[n];

  29. int i = 0;

  30. for (i = 0; i < n; i++)

  31. {

  32. scanf("%d", &arr[i]);

  33. }


  34. // 从小到大排序

  35. BubbleSortSmallToBig(arr, n);


  36. // 处理方式如下

  37. int j = 0;

  38. int tmp = 0;

  39. int num = 0;

  40. while (j != n)

  41. {

  42. tmp = arr[j];

  43. while (tmp == arr[j])

  44. {

  45. num++;

  46. j++;

  47. }

  48. printf("%d %d\n", tmp, num);

  49. num = 0;

  50. }

  51. return 0;

  52. }


  53. // 数组内元素交换

  54. void swap(int *array, int i, int j)

  55. {

  56. int temp = array[i];

  57. array[i] = array[j];

  58. array[j] = temp;

  59. }


  60. // 从小到大排序

  61. void BubbleSortSmallToBig(int *array, int len) // O(n*n)

  62. {

  63. int i = 0;

  64. int j = 0;


  65. for(i=0; i<len; i++)

  66. {

  67. for(j=len-1; j>i; j--)

  68. {

  69. if( array[j] < array[j-1] )

  70. {

  71. swap(array, j, j-1);

  72. }

  73. }

  74. }

  75. }

运行结果

转发、点在看就是对小编最大的支持!


猜你喜欢

C语言每日一练(001)

C语言每日一练(002)

C语言每日一练(003)

C语言每日一练(004)

C语言每日一练(005)



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存