如何减少实现01图案输出的C程序的编译token数量
优化方案
你可以通过合并冗余声明、简化判断逻辑的方式减少token数量,修改后代码如下:
#include <stdio.h> int main() { int rows, i, j; scanf("%d", &rows); for(i = 0; i < rows; i++) { for(j = 0; j <= i; j++) printf(j == 0 || i == j || i == rows - 1 ? "1 " : "0 "); printf("\n"); } return 0; }
如果你的编译环境支持C99及以上标准,还可以省略main函数末尾的return 0进一步压缩token:
#include <stdio.h> int main() { int rows, i, j; scanf("%d", &rows); for(i = 0; i < rows; i++) { for(j = 0; j <= i; j++) printf(j == 0 || i == j || i == rows - 1 ? "1 " : "0 "); printf("\n"); } }
优化说明
- 合并变量声明:将原本分开写的
int rows;和int i,j;合并为一条声明语句,减少1个int关键字对应的token。 - 简化条件判断:原代码的多分支if-else逻辑本质是三个满足就输出1的条件,用三目运算符替换后直接去掉了4个分支的大括号、多组
if/else if关键字,大幅减少token数量。 - 调整换行逻辑:将原本嵌在分支内的换行操作移到内层循环结束后执行,省去了分支内重复的
printf("1 \n")调用,减少字符串常量、函数调用相关的token。
以上修改后token数量可降至95左右,完全满足102以下的要求,运行输出和原代码完全一致。
内容的提问来源于stack exchange,提问作者krishan singh
相关产品推荐
相关产品推荐

