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

标签 c

我正在 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/

相关文章:

c - 使用 gdb 调试 Linux 内核模块

c - 确定 C 编译器是小端还是大端

c - Win32 GUI应用程序: how to get stderr messages into messagebox

c - 链接器或加载器如何处理共享库的损坏软链接(soft link)?

ios - 为 iPad 2 进行开发

c++ - 找出函数中变量分配类型的方法

c - 如果使用用户定义函数和 main() 函数访问全局声明的数组元素,为什么会得到不同的值?

c - watcom 内联汇编出现错误 "Illegal use of register"

c - 如何在 Linux 中获取键盘状态?

c - 从 argv[] 获取特定的字符值并创建一个新的 const char