是否有可能只使用a和b就能得到与此代码相同的结果? 我试图从a和b计算c,以避免使用第三个变量,但我找不到解决方案.

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

const int LENGTH = 20;

int main()
{
    char arr[LENGTH];

    for (int a = 0, b = 1, c = 0; c < LENGTH; c++) {
        if (a < b) {
            arr[c] = '*';
            a++;
        } else {
            arr[c] = ' ';
            a    = 0;
            b++;
        }
    }

    printf(arr);
    return EXIT_SUCCESS;
}

编码结果:* ** *** **** *****

推荐答案

如果通过链接或编写某种类型的sqrt()函数来判断一个数字是否为三角形,您认为这不是一个可以接受的解决方案:

最后一个字符串中每组**...的末尾都有一个' ',因此字符串中最短的线段是"* ",它有2 char秒长.

循环中的c是该迭代应该写入的char数组的索引,a'*'的当前group中的索引,b'*'的当前group的长度减1(因为我们要计算空格).紧接在您的for循环中的if子句之前,可以说c是2到ba的和.

换句话说,如果a=0,b=1,那么c=0,因为从2到0的和是0,加0是0.

如果a=3,b=4,则c=(2+3+4)+3=12.

这意味着您可以像这样编写代码:

#include <stdio.h>

const int LENGTH = 20;

int sumFromTwo(int in){  //Recursive function to calculate sigma(2:in)
  if(in < 2)
    return 0;
  else
    return in + sumFromTwo(in - 1);
}

int main()
{
    char arr[LENGTH + 1];  //Extra byte for null-terminator

    for (int a = 0, b = 1; sumFromTwo(b) + a < LENGTH ; ) {
        if (a < b) {
            arr[sumFromTwo(b) + a] = '*';
            a++;
        } else {
            arr[sumFromTwo(b) + a] = ' ';
            a    = 0;
            b++;
        }
    }

    arr[LENGTH] = '\0';  //Always null-terminate your strings

    printf(arr);
    return EXIT_SUCCESS;
}

但是,使用递归来避免使用几乎肯定会被优化到寄存器中的变量,不会为您的计算机节省任何资源,尤其是所有的RAM,所以按照您在问题中的方法来做肯定更干净(但是please空值-在将字符串传递给您 Select 的printfputs之前结束它).

C++相关问答推荐

有关字符数组指针和次指针以及qsort函数中的cmp函数的问题

我可以动态分配具有空类型函数的矩阵吗?

在Windows上构建无聊的SSL x64

C/SDL程序,渲染不使用我的渲染器

当打印字符串时,为什么在c中没有使用常量限定符时我会收到警告?

C中是否有语法可以直接初始化一个常量文本常量数组的 struct 成员?

ZED for SDL上的C语言服务器

为什么I2C会发送错误的数据?

_泛型控制表达式涉及数组碰撞警告的L值转换错误?

将数据移动到寄存器时出现分段故障

为什么realloc函数在此代码中修改变量?

OSDev--双缓冲重启系统

C-try 将整数和 struct 数组存储到二进制文件中

如何在zOS上编译共享C库

为什么会导致分段故障?(C语言中的一个程序,统计文件中某个单词的出现次数)

浮点正零何时不全为零?

c如何传递对 struct 数组的引用,而不是设置 struct 的副本

我的代码可以与一个编译器一起使用,但不能与其他编译器一起使用

std::malloc/calloc/realloc/free 与纯 C 的 malloc/calloc/realloc/free 有什么不同

为什么INT_MIN是在c语言的头文件limits.h中定义的(-INT_MAX-1)而不是直接使用-2147483648