arrays - 如何编写一个函数来返回没有匹配对的数组元素的值?
问题描述
我想就必须返回没有匹配对的数组元素的值的函数寻求帮助。
例如,
a) 在数组 [1, 1, 2, 3, 4, 3, 4] 中,没有对的元素是 2。
b) 在数组 [1, 1, 2, 4, 3, 4, 2, 3, 4] 中,没有对的元素是 4。
到目前为止,我想出了下面的代码。所以基本上它检查重复的数字,因此适用于 b) 情况;但它不适用于 a) 案例。欢迎任何有关如何修复此代码以使其适用于 a) 和 b) 情况的帮助。
#include <stdio.h>
int ft_unmatch(int *tab, int length)
{
int i;
int j;
int count;
i = 0;
while (i < length)
{
j = i + 1;
count = 0;
if (tab[i] == tab[j])
{
count++;
while (j < length)
{
if (tab[i] == tab[j])
count++;
j++;
}
if (count % 2 != 0)
return (tab[i]);
}
i++;
}
return (tab[i]);
}
int main(void)
{
//some additional arrays to check the function
int tab[9] = {1, 1, 2, 4, 3, 4, 2, 3, 4};
//int tab[11] = {1, 1, 2, 4, 3, 1, 4, 2, 4, 3, 4};
// int tab[7] = {1, 1, 2, 3, 4, 3, 4};
printf("%d\n", ft_unmatch(tab, 9));
return (0);
}
解决方案
这段代码有很多问题:
您将每个数字与以下所有数字进行比较。因此,在 a) 中,您将第一个 1 与所有其他数字进行比较并计算两个 1,但随后您再次计算第二个 1 并且找不到另一个,因此您的代码返回 1。
此外,您在 the 之后缺少大括号,并且只有在第一个为真if tab[i] == tab[j])
时才能进入while(j<length)
-loop 。if(tab[i] == tab[j]
一种可能的解决方案是从数组中删除已经计数的数字,这样您就不会再次计算它们,或者对数组进行排序并计数直到每次递增。如果您只使用小数字,您还可以迭代每个可能的数字并计算它出现的频率,尽管这样会不太优雅。
推荐阅读
- arrays - Gscript寻找一张纸的一个值并写入第一张纸
- r - 用 forcats 中的 str_replace() 替换 NA 而不是“N/A”不起作用
- swift - 参数类型“错误”不符合预期类型 Swift.Error
- c++ - 库链接期间未找到参考
- laravel - 如何安装 vue-chartkick 并在我的组件中使用它?
- php - Spatie 给出了一个错误,例如“用户无权访问此页面。”
- node.js - Google oauth 在本地主机上工作,但不在我的网络服务器上
- gtk - 如何使 StackSwitcher 选项卡可关闭 Gtk/Vala
- mysql - 从可变长度链接MYSQL中提取str
- php - 在 Json PHP 输出中转换数组不符合预期