0

我正在尝试用 C 中的向量(数组)实现以下问题的解决方案。我想输入一个数字和它发生的次数。

这是一个例子:

Imput n:  5

Imput num 1: 8
Imput num 2: 9
Imput num 3: 8
Imput num 4: 5
Imput num 5: 5

该程序现在将显示:

Number 8: 2 occurences
Number 9: 1 occurences
Number 5: 2 occurences

但我的节目:

Number 8: 2 occurences
Number 9: 1 occurences
Number 8: 2 occurences
Number 5: 2 occurences
Number 5: 2 occurences

我能怎么做???泰

#include <stdio.h>
#include <stdlib.h>
#define SIZE 20

int main ()
{
    int vett1[SIZE], vett2[SIZE];
    int n, i, j;
    int flag;

    printf ("Imput n: ");
    scanf  ("%d", &n);

    for (i=0; i<n; i++)
    {
        printf ("Imput %d di %d: ", i+1, n);
        scanf  ("%d", &vett1[i]);
    }

    printf ("\n\nYour vector: : ");

    for (i=0; i<n; i++)
    {
        printf ("%d ", vett1[i]);
    }

    for (i=0; i<n; i++)
    {
        flag=0;

        for (j=0; j<n; j++)
        {
            if (vett1[j] == vett1[i])
            {
                flag++;
            }
        }

        vett2[i] = flag;
    }

    printf ("\n\n");

    for (i=0; i<n; i++)
    {
        printf ("Number %d: %d occurencese\n", vett1[i], vett2[i]);
    }

    return 0;
}
4

4 回答 4

2

您需要一种方法来跟踪 (1) 数字和 (2) 出现次数。像这样想:如果你是用手做的,用铅笔和纸,而不是用电脑,你会怎么做?

您可能需要一张纸,上面有一张小桌子,左栏中有数字,右栏中有出现次数。然后,您将检查数字(在您的情况下为 8、9、8、5、5),对于每个数字,您将检查它是否在您的表格中。如果它已经在表中,则将计数加一。如果它不在表中,则将其放在新行上,计数为 1。

现在您需要做的就是将该表实现为不是纸上的表,而是某种数据结构。

于 2012-05-23T14:26:50.653 回答
0

您的最后一个代码写道:

for (i=0; i<n; i++)
{
    printf ("Number %d: %d occurencese\n", vett1[i], vett2[i]);
}

您打印每个输入数字的 n 次以显示相应的出现,所以我认为您只需要更改打印输出功能就可以了。

于 2012-05-23T14:22:34.400 回答
0

您只想查看每个数字一次。有几种方法可以实现这一点:

  1. 每当您检查一个数字时,首先查看它是否是该数字在数组中的第一次出现。如果没有,请忽略它。非常低效,因为在查看第 n 个元素时,您需要返回并检查它之前的所有元素。

  2. 与上述类似,但将首次出现验证与计数结合起来。您有两个嵌套循环,带有ij。如果j循环看到vett1[j] == vett1[i]where j<i,这意味着这不是这个数字的第一次出现。忽略它。这与您当前的解决方案一样有效。

  3. 排序 - 用于qsort对数组进行排序。然后只复习一次。现在每个数字的所有出现都一个接一个地出现,因此您只需遍历数组即可轻松计算它们。这是最有效的方法,但有点复杂。

于 2012-05-23T14:28:10.310 回答
0

您的代码是正确的,您只需要修改上次打印的 for 循环,只需检查那里的条件,如果元素与以前的元素相似,则再次跳过打印。

for(i=0;i<n;i++)
{
    if(vett1[i+1] == vett1[i])
        continue;
    else
        printf("Number %d %d occurence",vett1[i],vett2[i]);
}
于 2014-07-19T11:39:25.433 回答