一道清华大学复试上机题
问题:为什么只需要定义一个整数变量a,而不是定义一个数组a[]?
回答
在这段代码中,只需要定义一个整数变量 a,而不是一个数组 a[],是因为程序的逻辑是逐个处理输入的整数并立即输出结果,不需要同时存储所有输入的整数。具体原因如下:
1. 每次处理一个数后立即输出
• 程序的逻辑是逐个读取输入的整数 a,计算其约数的个数,并立刻输出结果。
• 因为结果是即时输出的,不需要保留输入的历史数据,所以只需要一个变量 a 来存储当前正在处理的数。
2. 节省内存
• 如果使用数组 a[],需要分配一个额外的存储空间来保存所有输入的整数。对于大的输入(例如 n 很大时),这会占用更多的内存。
• 当前代码仅需要一个变量 a,可以更高效地利用内存。
3. 输入数据只被访问一次
• 输入的每个整数 a只在读取后使用一次,用完就被覆盖。没有需要反复访问或保留这些输入的需求,因此不需要数组。
4. 数组的额外复杂性
• 如果使用数组 a[],需要先读取所有输入的整数,然后再遍历数组进行处理。这样代码会多出一个额外的循环,并增加不必要的复杂性。
代码对比
当前实现:使用单个变量
objectivec
int a;
for (int i = 0; i < n; ++i) {
scanf("%d", &a);
// 计算并输出a的约数个数
}
• 内存占用少,逻辑简单,处理高效。
使用数组的实现
objectivec
int a[n];
for (int i = 0; i < n; ++i) {
scanf("%d", &a[i]); // 先存储所有输入
}
for (int i = 0; i < n; ++i) {
// 计算并输出a[i]的约数个数
}
• 增加了数组的存储开销和额外的循环。
• 仅在需要多次使用输入数据时才有必要。
总结
使用单个变量 a 是因为:
-
每次只需要处理一个整数,结果可以即时输出。
-
不需要保存输入的历史数据。
-
节省内存,代码更高效且简洁。