作为编程入门选手,经常会遇到递归规律题、图案输出题、多组输入题这三类基础题——它们看似简单,但容易踩坑(比如递归的规律找错、图案的空格/星号数量算错)。今天就拆解3道经典入门题,结合错误题解的坑点+正确解法,帮你巩固基础!

有一个递归函数 dfs(cnt)(从dfs(1)开始),每次先执行for(i=1到cnt) ans++,再调用dfs(cnt+2)。求“递归n层后”ans的值(输入0≤n≤1e9)。
很多人会像原代码那样直接写ans = n*n,但这是错误的——得先模拟递归过程找规律:
dfs算一层。比如从dfs(1)开始,第1层是dfs(1),第2层是dfs(3),第3层是dfs(5)…ans的贡献:第k层的cnt = 2k-1,所以该层for循环会让ans增加2k-1。当递归n层时,ans是前n个奇数的和——而前n个奇数的和恰好是n²!(比如n=2时,1+3=4=2²,对应示例输入2的输出)。
不过原代码的问题是:没考虑输入n=0的情况(输入0时ans应该是0,但原代码会输出0*0=0,这部分是对的,但逻辑描述不清晰)。
#include<stdio.h>
int main() {
long long n; // 注意n最大是1e9,n²会超过int范围,要用long long
scanf("%lld", &n);
printf("%lld\n", n * n);
return 0;
}1e9的平方会超过int(最大约2e9),必须用long long。
输入整数n(2≤n≤9),输出“双层金字塔”(比如n=2时输出1个星、3个星、1个星;n=5时输出1、3、5、7、9、7、5、3、1个星)。
双层金字塔分为上层(从1个星到n个星,每次+2)和下层(从n-1个星到1个星,每次-2),核心是算对每行的空格数+星号数:
i行(i从1到n): n - i(比如n=2,i=1时空格数1,i=2时空格数0);2*i - 1(i=1→1个,i=2→3个)。i行(i从1到n-1): i(比如n=2,i=1时空格数1);2*(n - i) - 1(i=1→2*(2-1)-1=1个)。
原代码中j的循环条件写了j<=n-i,但实际是j从1到n-i,循环变量应该是j++(原代码写了i++,这是语法错误,会导致死循环)。
#include<stdio.h>
int main() {
int n;
while (scanf("%d", &n) != EOF) { // 多组输入
// 输出上层金字塔
for (int i = 1; i <= n; i++) {
// 打印空格
for (int j = 1; j <= n - i; j++) {
printf(" ");
}
// 打印星号
for (int k = 1; k <= 2 * i - 1; k++) {
printf("*");
}
printf("\n");
}
// 输出下层金字塔
for (int i = 1; i <= n - 1; i++) {
// 打印空格
for (int j = 1; j <= i; j++) {
printf(" ");
}
// 打印星号
for (int k = 1; k <= 2 * (n - i) - 1; k++) {
printf("*");
}
printf("\n");
}
}
return 0;
}while(scanf(...)!=EOF)处理;j++写成i++会导致逻辑混乱)。
多组输入两个整数,输出“a=b”“a>b”“a<b”的格式(数字和符号之间无空格)。
while(scanf("%d %d", &a, &b)!=EOF)循环读取;a==b、a>b、a<b,注意输出格式要和题目一致(比如1=1而不是1 = 1)。printf的格式字符串错误:比如"%d=%d\n"是对的,但原代码里写了"%d=%d\n"但变量顺序是a,b,这部分是对的,但else if的条件可以简化(不需要第三个else if,直接用else即可);scanf("%d%d")中间没加空格,可能导致输入错误(应该写scanf("%d %d", &a, &b))。#include<stdio.h>
int main() {
long long a, b; // 题目说范围是-2^31~2^31-1,用long long更安全
while (scanf("%lld %lld", &a, &b)!= EOF) {
if (a == b) {
printf("%lld=%lld\n", a, b);
} else if (a > b) {
printf("%lld>%lld\n", a, b);
} else {
printf("%lld<%lld\n", a, b);
}
}
return 0;
}while+scanf);-2^31是int的最小值,但计算时用long long更安全。
这3道题都是编程入门的高频题,看似简单但容易踩坑——比如递归题的规律、图案题的循环变量、多组输入的格式。入门阶段练这类题,核心是找规律、理清楚循环逻辑、注意数据范围和格式,这些细节会直接影响代码是否能AC~
要不要我帮你整理一份编程入门必刷题的考点清单,涵盖递归、图案、多组输入等常见题型的核心注意点?