Онлайн компилятор C

#include <stdio.h> void print_sequence(int n) { if( n == 1) { printf("1 "); return; } print_sequence(n-1); int i = 1,j = 0, k = 0, j_save=0; while(n <= i){ if(n >= j_save && n <= j){ break; } j_save = j; j +=i; i++; k++; } printf("&d ", k); } int main() { int n; scanf("%d", &n); print_sequence(n); return 0; }
这段代码试图打印一个序列,但存在逻辑错误和语法错误。函数 `print_sequence` 递归地调用自身,然后通过一个循环计算某个值并打印。从代码意图看,可能想生成类似“每个数字重复其值次”的序列(如1,2,2,3,3,3,...),但实现不正确。

- 第14行的 `printf("&d ", k);` 中 `&d` 是错误的格式说明符,应该是 `%d`。这会导致输出错误。
- 循环条件 `while(n <= i)` 可能逻辑颠倒。通常这类问题需要根据 `n` 找到它属于哪个数字的重复区间,但这里的条件判断和变量更新方式很可能无法正确找到 `k`。
- 递归调用 `print_sequence(n-1)` 先打印前面的数字,然后计算当前 `n` 对应的值,但计算部分使用了未初始化的变量 `j_save`(虽然之后赋值了),且循环逻辑不清晰,很可能陷入死循环或得到错误结果。

- 检查 `printf` 中的格式说明符,确保使用 `%d` 而不是 `&d`。
- 重新思考如何根据 `n` 确定它属于哪个数字的重复区间。例如,数字1出现1次,数字2出现2次,数字3出现3次……你需要找到最小的 `k` 使得 `1+2+...+k >= n`,这个 `k` 就是第 `n` 个位置上的数字。你的循环条件 `while(n <= i)` 和变量更新方式可能与此目标不符,建议重新设计循环逻辑。