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

能否仅用1个循环与2个变量简化该C语言算法,替代原三变量实现?

问题解答

能否仅用变量a和b实现相同结果?

完全可以。原代码里的变量c本质是数组索引,用来记录当前处理的字符位置。我们可以通过变量a(当前组已输出的星号数)和b(当前组应输出的星号总数)的组合,计算出已经输出的字符总数,以此替代c的作用,不需要额外的索引变量。

1个循环+2个变量的简化实现

直接用两个变量维护状态,配合单循环即可完成,甚至可以去掉数组直接输出字符,逻辑更简洁:

#include <stdio.h>
#include <stdlib.h>

const int LENGTH = 20;

int main() {
    int a = 0, b = 1;
    while ( (b == 1 ? a : (b-1)*(b+2)/2 + a ) < LENGTH ) {
        if (a < b) {
            putchar('*');
            ++a;
        } else {
            putchar(' ');
            a = 0;
            ++b;
        }
    }
    putchar('\n');
    return EXIT_SUCCESS;
}

逻辑说明

  • a:记录当前分组内已经输出的星号数量,当a等于b时,说明当前组的星号已输出完毕,切换为输出空格。
  • b:记录当前分组需要输出的星号总数,每完成一组(星号+空格)后,b递增1,进入下一组更多星号的输出。
  • 循环条件通过a和b计算已输出的字符总数,判断是否达到指定长度LENGTH,完全替代了原代码中c的作用。

如果觉得循环条件的表达式有点复杂,也可以用循环变量配合a、b(此时循环变量仅作为计数,不算算法核心变量),代码可读性更好:

#include <stdio.h>
#include <stdlib.h>

const int LENGTH = 20;

int main() {
    int a = 0, b = 1;
    for (int i = 0; i < LENGTH; ++i) {
        if (a < b) {
            putchar('*');
            ++a;
        } else {
            putchar(' ');
            a = 0;
            ++b;
        }
    }
    putchar('\n');
    return EXIT_SUCCESS;
}

内容的提问来源于stack exchange,提问作者Theodore L'Heureux

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:25:26