C编程练习006

1、题目

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

数据约定

n<=100; 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

2、代码

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

/*******************************************************************************************************
** 题    目: 在一个有限的正整数序列中,有些数会多次重复出现在这个序列中。如序列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
********************************************************************************************************/
#include <stdio.h>
#include <string.h>


void swap(int *array, int i, int j);
void BubbleSortSmallToBig(int *array, int len); // O(n*n)    

// 主函数
int main(void)
{
    // 数据输入
    int n;
    scanf("%d", &n);

    int arr[n];
    int i = 0;
    for (i = 0; i < n; i++)
    {
        scanf("%d", &arr[i]);
    }

    // 从小到大排序
    BubbleSortSmallToBig(arr, n);

    // 处理方式如下
    int j = 0;
    int tmp = 0;
    int num = 0;
    while (j != n)
    {
        tmp = arr[j];
        while (tmp == arr[j])
        {
            num++;
            j++;
        }
         printf("%d %d\n", tmp, num);
         num = 0;
    }
    return 0;
}

// 数组内元素交换
void swap(int *array, int i, int j)
{
    int temp = array[i];
    array[i] = array[j];
    array[j] = temp;
}

// 从小到大排序
void BubbleSortSmallToBig(int *array, int len) // O(n*n)
{
    int i = 0;
    int j = 0;

    for(i=0; i<len; i++)
    {
        for(j=len-1; j>i; j--)
        {
            if( array[j] < array[j-1] )
            {
                swap(array, j, j-1);
            }
        }
    }
}

运行结果

VN8ccj.png


VcSFJJ.md.png


 上一篇
C编程练习007 C编程练习007
1、题目 给定两个仅由大写字母或小写字母组成的字符串(长度介于1到10之间),它们之间的关系是以下4中情况之一:  1:两个字符串长度不等。比如 Beijing 和 Hebei  2:两个字符串不仅长度相等,而且相应位置上的字符完全一致(区
2018-06-06
下一篇 
C编程练习005 C编程练习005
1、题目 在已知两个从小到大有序的数表中寻找都出现的第一个元素 2、代码/**********************************************************************************
2018-06-04
  目录