如何比较字符串中的各个元素?

时间:2019-06-07 20:41:17

标签: c

我正在用Hackerank练习,而我陷入了第一个问题。我应该在写与袜子配对的代码。 “例如,有n = 7根颜色分别为ar = [1,2,1,2,3,2]的袜子。有一对颜色1和一对颜色2。还剩下三只奇怪的袜子,一只每种颜色的颜色。对数为2。“

问题的约束条件是1≤n≤100和1≤ar [i]≤100,其中0≤i

我的想法是计算每种颜色出现多少次,然后将该数字除以2,然后将所有颜色对加在一起。我不知道如何编写循环以比较100种可能的颜色,并且每种颜色都有单独的计数器。我已经包含了到目前为止的内容,但这并不好。

for(i = 0; i < n; i++)
{
    if(ar[i] == ar[i+1])
    {
         sum1 = sum1 + 1;
    }
}

if(sum1 % 2 == 1)
{
    sum1 = sum1 - 1;
}

sum1 = sum1 / 2;

将寻求任何帮助。

3 个答案:

答案 0 :(得分:0)

您可能有一个仅存储每种可能性的计数器的数组。

for(int i = 0; i < n; i++){
    newAr[ar[i]]++;
}

然后通过这些元素中的每个元素%。数组ar = [1,2,1,2,3,2]的结果数组将是newAr = [0,2,3,1,0,0,0]。

for(int i = 0; i < n; i++){
    numPairs += newAr[i]/2;
    if(newAr[i] % 2 == 1){
        numOddSocks++;
    }
}

答案 1 :(得分:0)

“我不知道如何编写循环以比较100种可能的颜色,并且每种颜色都有单独的计数器。”

通过为计数器定义一个数组,可以为每个计数器拥有单独的计数器。对您而言,“颜色”是整数,因此您的数组索引可以用作您要计数的“颜色”。存储的值(在数组中的每个元素处)将是您在输入中看到该“颜色”的次数。

然后,循环输入,并增加计数器数组中的相应元素。这样,给定袜子的匹配是输入中的下一排匹配还是多个输入元素都无关紧要,并且您无需执行任何昂贵的操作,例如将每个输入元素与每个其他输入元素进行比较。

在循环结束时,循环遍历您的计数器数组;每个元素中的值都会告诉您有关“彩色”袜子的信息:

0           : no socks of that color in the input
odd number  : there are `x / 2` pairs of this color and an odd sock
even number : there are `x / 2` pairs of this color

计算一下行进中的成对袜子和奇数袜子的数量,最后得到的袜子和奇数袜子的总数量,我想是您想要的输出。

答案 2 :(得分:0)

只需使用100个项目的数组即可。每种颜色一个。