c - 检测一组值的变化

标签 c

我有一个项目,其中一个程序采用大量整数值并检测这些值之间的变化。只接受一种与其他值不同的值,而且只接受一次。当识别出错误时,例如 10 12 13 ...,程序需要立即停止,而不是获取其他值。

e.g: 10 10 10 10 10 18 10 10 10

这是一个可接受的数据条目,因为 18 只使用了一次,并且是唯一不同的值。

e.g: 10 10 14 17 10 10 10 10

这不是可接受的数据条目,因为使用了 3 个不同的值。

e.g: 10 10 10 10 12 12 12 12 12

这也不是可接受的数据条目,因为 10 和 12 被多次使用。

我无法为此创建算法,涵盖这 3 种甚至更多情况。有什么想法吗?

最佳答案

我能想到的最简单的算法是计算您看到两个不同值的次数。假设 input 是一个大小为 input_size 的数组,当序列改变太多时此函数返回 01如果检测到一个或零个变化:

int isvalidsequence(const int *input, int input_size)
{
    int item1, item2;
    int seen1 = 0, seen2 = 0;

    for (int i = 0; i < input_size; ++i)
    {
        int item = input[i];
        if (seen1 == 0)
        {
            item1 = item;
            ++seen1;
        }
        else if (item == item1)
        {
            ++seen1;
        }
        else if (seen2 == 0)
        {
            item2 = item;
            ++seen2;
        }
        else if (item == item2)
        {
            ++seen2;
        }
        else
        {
            return 0;
        }

        /* Exit loop early if we've already seen both characters more than once */
        if (seen1 > 1 && seen2 > 1)
            return 0;
    }
    return 1;
}

它存储它看到的第一个不同的项目和它看到的第二个不同的项目,然后开始计算它看到每个项目的次数。如果它随后找到第三个不同的项目,则序列更改太多。如果它发现第一个和第二个不同的项目都被多次看到,那么序列也发生了太大的变化。否则,至少两个项目中的一个被看到 0 次或 1 次,因此序列有效。

关于c - 检测一组值的变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33651318/

相关文章:

c - 父子和 fork 子之间的文件描述符共享

Qt之类的C框架?

c - 在处理数组时,您会在哪里添加 +1?

命令行参数和文件输入

c - 尝试理解 C 中的内联汇编代码

c - C 中的互连结构和回调

c - 如何创建在多个接口(interface)上发送/接收 UDP 广播的服务

c - 矩阵计算器错误 - 无法正常工作

c - float math.cos 不准确

计算操作数C