如何用while循环实现C语言可变长度的数组递减判断逻辑
实现严格递减数组的判断(仅用while循环)
我来帮你搞定这个严格递减数组的判断逻辑,而且完全只用while循环就能实现~ 先说说你之前代码的问题:硬编码嵌套if没法适配不同长度的数组,而且逻辑上错误地拿后续元素和第一个元素比,不是和前一个元素比,另外n也没初始化,循环根本跑不起来。
下面是正确的实现思路和代码:
核心逻辑梳理
要判断数组是否严格递减,本质是每一个后续元素都要小于前一个元素,也就是对所有0 ≤ i < n-1,都满足c[i+1] < c[i]。另外要处理边界情况:如果数组长度n=1,直接符合条件(单个元素没有递减的说法,默认满足)。
完整代码实现
#include <stdbool.h> #include <stdio.h> bool isStrictlyDecreasing(int c[], int n) { // 边界处理:单个元素直接返回true if (n == 1) { return true; } int i = 0; // 循环遍历到倒数第二个元素(因为要比较i和i+1) while (i < n - 1) { // 只要有一对不满足递减,直接返回false if (c[i+1] >= c[i]) { return false; } i++; } // 所有相邻元素都满足条件,返回true return true; } // 测试示例 int main() { // 测试不同情况 int test1[] = {9,7,5,3,1}; printf("数组[9,7,5,3,1]是否严格递减?%s\n", isStrictlyDecreasing(test1, 5) ? "是" : "否"); int test2[] = {8,6,7,4}; printf("数组[8,6,7,4]是否严格递减?%s\n", isStrictlyDecreasing(test2, 4) ? "是" : "否"); int test3[] = {15}; printf("数组[15]是否严格递减?%s\n", isStrictlyDecreasing(test3, 1) ? "是" : "否"); int test4[] = {5,4,3,2,1,0,-1,-2}; // 长度8的数组 printf("长度8的数组是否严格递减?%s\n", isStrictlyDecreasing(test4, 8) ? "是" : "否"); return 0; }
代码解释
- 边界处理:当数组长度为1时,直接返回
true,因为没有需要比较的元素。 - 循环条件:
i < n-1保证我们不会越界,最后一次比较是c[n-2]和c[n-1](数组最后两个元素)。 - 提前终止:只要发现某一对元素不满足
c[i+1] < c[i],立刻返回false,不用继续循环,提升效率。 - 适配长度范围:不管
n是1到8之间的任何值,这个逻辑都能正确处理,不需要硬编码任何固定次数的比较。
这样就完美解决了你的需求,而且完全符合“仅使用while循环”的要求~
内容的提问来源于stack exchange,提问作者DronDram
相关产品推荐
相关产品推荐

