腾讯笔试题求助:c++数数的问题,比如一个数组112222555...如何统计不同数字各有多少个数?

数组元素个数不大于200个。(我已经先排序了,下一步数数不知道怎么弄。原题数组是打乱的,直接让求)1.要求:把不同的数字依次放入数组中,且统计出不同数字各有几个数。2.结果:把1放入a[0][0],2放入a[1][0],5放入a[2][0]中,且a[0][1]=2,a[1][1]=4;a[2][1]=3
也就是说把一堆数组中的不同的数统计出来,把不同的数放在一个二维数组的第一列,且也要把重复次数数出来放在二维数组的第二列。

1、这个题目不需要排序,这里假设:char *a="1231231231234";

2、申请一个 int  shu[11] ; ,分别存放0 - 9 数字的个数

3、从头至尾,逐位开始遍历数组,这里以 i 作为数组的下标

4、遍历的过程中,  shu[  a[ i] ] ++; 这样对统计赋值

        结果是:1 = 4  、2 = 4 、 3  =  4 、4 = 1

5、不知道是不是描述清楚了,嘿嘿

#include<stdio.h>

int main()
{
    int a[]={1,2,3,1,2,3,1,1,4,8,8,8};
    int shu[12]={0};
    int x;

    for(x=0;x<12;x++)
        shu[a[x]]++;

    for(x=0;x<10;x++)
        printf("统计输出 %d 出现 %d \n",x,shu[x]);
    return 0;

}

追问

非常感谢,但还有一些问题需要求教。
1,数组中的元素可以是不连续的,整个数列可以没有2,3等,
2.数组中的元素取值范围可以是0-100;
如果a[]={1,2,3,1,2,3,1,1,4,8,8,8};
希望输出的结果:第一列是不重复的数,第二列是重复的次数。
1 4
2 2
3 2
4 1
8 3

追答

是这样的效果吗,我这里只是没有过滤 0 次出现的

如果取值是 0-100,那么定义变量,做相应的扩大, int shu[102]={0};,其他的不变

#include<stdio.h>
 
int main()
{
    int a[]={1,2,3,1,2,3,1,1,4,8,8,8};
    int shu[102]={0};
    int x;
 
    for(x=0;x<12;x++)
        shu[a[x]]++;
 
    for(x=0;x<100;x++)
        printf("统计输出 %d 出现 %d \n",x,shu[x]);
    return 0;
 
}

 我给你做一个输入数字,自动计算的吧

追问

好的,,非常非常感谢。

追答

你也是北京呀

满意请采纳,给你私信了

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-11

a中元素都初始化为0,数组为array[],array中共有num个数,的话:

int i;
int count = 0;
for(i = 0; i < num; i++)
{
    if(array[i] > count)
        count = array[i];
    a[array[i]-1][1]++;
}
for(i = 0; i < count; i++)
    a[i][0] = i+1;

 无需排序

追问

统计出各个不同的数,假定数组有2个1,4个2,3个5,把不同的数字放在一列数组中(输出的结果这个数组没有重复的数字,只有1,2 ,5三个数),然后统计出重复的次数。。。你这样求不出结果吧,还是谢谢额、

追答

可以的啊 你把原始变量给我 我给你写出来 你可以去调试看看

追问

这样吧:我给你一个数组:你看能不能统计出来:a[]={1,2,3,1,2,3,1,1,4,8,8,8};结果希望得到输出
第一列是不重复的数,第二列是重复的次数。
1 4
2 2
3 2
4 1
8 3

追答#include <stdio.h>
#include <string.h>

void main()
{
    int a[]={26,26,33,44,55,1,2,3,1,1,4,8,8,8};
    int i;
    int count[101] = {0};
    for(i = 0; i < 14; i++)
count[a[i]]++;
    int num = 0;
    for(i = 0; i < 101; i++)
if(count[i])
    num++;
    int* p = new int[2*num];
    memset(p, 0, 2*num*sizeof(int));
    int** out = new int*[num];
    for(i = 0; i < num; i++)
        out[i] = p+2*i;
    num = 0;
    for(i = 0; i < 101; i++)
    {
if(count[i])
{
    out[num][0] = i;
    out[num++][1] = count[i];
        }
    }
    for(i = 0; i < num; i++)
        printf("%d %d\n", out[i][0], out[i][1]);
    delete []out;
    delete []p;
}

是你的要求了吧

本回答被提问者采纳

...比如一个数组112222555...如何统计不同数字各有多少个数?_百度知 ...
a中元素都初始化为0,数组为array[],array中共有num个数,的话:int i;int count = 0;for(i = 0; i < num; i++){ if(array[i] > count) count = array[i]; a[array[i]-1][1]++;}for(i = 0; i < count; i++) a[i][0] = i+1; 无需排序 ...

相似回答