You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C/C++编程任务:用至多1个条件运算符判断三段式正弦序列

解决正弦序列判断问题

需求回顾

给定奇数长度(N≥3)的整数序列,判断是否为正弦序列(定义为每连续三个元素满足先严格递增后严格递减,即对所有0 ≤ i ≤ N-3,有arr[i] < arr[i+1] > arr[i+2])。限制条件:

  • 最多使用1个条件运算符(三元运算符)
  • 循环仅用于遍历序列元素

现有代码分析

你提供的compare_num函数本质是返回两个整数的最小值:

int compare_num(int num1, int num2)
{
    return (int)(((num1 + num2) - sqrt((num1 - num2) * (num1 - num2))) / 2);
}

原理是利用sqrt((num1-num2)^2) = |num1-num2|,通过计算得到两个数中的较小值。

is_increasing2函数通过异或结果判断序列递增/递减:当结果为0时序列递减,非0时递增,逻辑成立,但不适用于正弦序列的判断。

你的is_increasingSine2函数存在核心问题:通过i += 3分组处理会跳过中间连续的三元组(比如序列长度为5时,会漏掉索引1-3的三元组),无法覆盖所有需要检查的情况。

改造后的正弦序列判断函数

基于现有compare_num函数,改造后的代码如下:

bool_t is_increasingSine2(int arr[], int size) {
    bool_t valid = 1; // 初始假设序列符合正弦要求
    // 遍历所有连续三元组
    for (int i = 0; i <= size - 3; ++i) {
        // 判断 arr[i] < arr[i+1]:min(arr[i], arr[i+1])是arr[i]且两数不相等
        int is_incr = (compare_num(arr[i], arr[i+1]) ^ arr[i]) == 0 && (arr[i] ^ arr[i+1]) != 0;
        // 判断 arr[i+1] > arr[i+2]:min(arr[i+1], arr[i+2])是arr[i+2]且两数不相等
        int is_decr = (compare_num(arr[i+1], arr[i+2]) ^ arr[i+2]) == 0 && (arr[i+1] ^ arr[i+2]) != 0;
        // 仅用1个条件运算符:只要有一个三元组不满足,就将valid置为0
        valid = (is_incr && is_decr) ? valid : 0;
    }
    return valid;
}

逻辑说明

  1. 遍历方式:通过i从0到size-3的循环,覆盖所有连续的三元组,确保每个需要检查的组合都被验证。
  2. 严格递增判断:(compare_num(arr[i], arr[i+1]) ^ arr[i]) == 0确保arr[i]是两者中的较小值,(arr[i] ^ arr[i+1]) != 0确保两数不相等,结合起来就是arr[i] < arr[i+1]。
  3. 严格递减判断:类似递增逻辑,确保arr[i+1] > arr[i+2]。
  4. 条件运算符使用:仅用1个三元运算符,当当前三元组满足要求时保持valid的原值,否则直接置为0,一旦某组不满足,后续循环不会再改变结果。

测试示例

  • 测试序列{1,3,2,5,4}:三元组3,2,5不满足先增后减,最终返回0,表示不是正弦序列
  • 测试序列{1,4,2,7,5,9,6}:所有三元组都满足先增后减,返回1,表示是正弦序列

内容的提问来源于stack exchange,提问作者jloner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:57:38