我正在 Hackerrank 上练习,我被第一个问题困住了。我应该编写一个匹配 socks 的代码。 “例如,有 n=7 只 socks ,颜色 ar = [1,2,1,2,3,2]。有一双颜色 1 和一双颜色 2。还剩下三只奇数 socks ,一只每种颜色的数量为 2 对。"
问题的约束条件为 1 ≤ n ≤ 100 且 1 ≤ ar[i] ≤ 100,其中 0 ≤ i < n。
我的想法是计算每种颜色出现的次数,然后将该数字除以 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;
如有任何帮助,我们将不胜感激。
最佳答案
“我不知道如何编写循环来比较 100 种可能的颜色,并为每种颜色设置单独的计数器。”
通过为计数器定义一个数组,您可以为每个计数器设置单独的计数器。对您来说方便的是,“颜色”是整数,因此您的数组索引可以作为您正在计数的“颜色”。存储的值(在数组中的每个元素处)将是您在输入中看到该“颜色”的次数。
然后,循环输入,并递增计数器数组中的相应元素。通过这种方式,给定 socks 的匹配是否是输入中的下一个或几个输入元素并不重要,并且您不需要做任何昂贵的事情,例如将每个输入元素与每个其他输入元素进行比较。 p>
在循环结束时,循环遍历计数器数组;每个元素中的值将告诉您有关“颜色” socks 的信息:
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
边计算 socks 的数量和奇数 socks 的数量,最后就得到 socks 的总数和奇数 socks 的总数,我认为这就是您想要的输出。
关于c - 如何比较字符串中的各个元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56501227/