返回 课程
信奥AC之路-1级
0% 完成
0/0 步骤
-
第1课 开发环境与基础输出5 主题|小节
-
第2课 算术运算符7 主题|小节
-
第3课 printf与运算输出7 主题|小节
-
第4课 数的进制与拆位6 主题|小节
-
第5课 变量与基础运算17 主题|小节
-
第6课 常量与取整运算8 主题|小节
-
第7课 关系运算8 主题|小节
-
第8课 逻辑运算9 主题|小节
-
第9课 输入与计算进阶10 主题|小节
-
第10课 if语句及双分支语句8 主题|小节
-
第11课 if语句及双分支进阶11 主题|小节
-
第12课 三目运算9 主题|小节
-
第13课 多分支、多if和switch语句11 主题|小节
-
第14课 循环(基本输出)7 主题|小节
-
第15课 循环(While+If)8 主题|小节
-
第16课 循环(计数、求和、求乘积)10 主题|小节
-
第17课 循环进阶(While+)8 主题|小节
-
第18课 do-while及while其他用法8 主题|小节
-
第19课 For循环基础9 主题|小节
-
第20课 For循环进阶8 主题|小节
课 进展
0% 完成
选择题
第 1 题
下面C++代码执行后的输出是( )。
int N = 10;
while(N){
N -= 1;
if(N%3 == 0)
cout << N << "#";
}
□ A. 9#6#3#
□ B. 9#6#3#0#
□ C. 9#7#6#3#0#
□ D. 10#9#7#6#3#0#
答案:B. 9#6#3#0#
解析:
这段代码先将N减1,然后检查N是否能被3整除,如果能,则输出N和”#”。循环直到N变为0。
执行过程:
- 初始N=10
- 第一次循环:N减1变为9,9%3=0,输出”9#”
- 第二次循环:N减1变为8,8%3≠0,不输出
- 第三次循环:N减1变为7,7%3≠0,不输出
- 第四次循环:N减1变为6,6%3=0,输出”6#”
- 第五次循环:N减1变为5,5%3≠0,不输出
- 第六次循环:N减1变为4,4%3≠0,不输出
- 第七次循环:N减1变为3,3%3=0,输出”3#”
- 第八次循环:N减1变为2,2%3≠0,不输出
- 第九次循环:N减1变为1,1%3≠0,不输出
- 第十次循环:N减1变为0,0%3=0,输出”0#”
因此,最终输出是”9#6#3#0#”。
编程题
编程题1:找因数
问题描述
小A最近刚刚学习了因数的概念。具体来说,如果一个正整数a可以被另一个正整数b整除,那么我们就说b是a的因数。
请你帮写一个程序,从小到大输出正整数a的所有因数。
输入描述
输入一行一个正整数a。保证a ≤ 1,000。
输出描述
输出若干行,为a的所有因数,从小到大排列。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯,但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入1
1
样例输出1
1
样例输入2
6
样例输出2
1
2
3
6
样例输入3
10
样例输出3
1
2
5
10
解题思路
- 读取正整数 a
- 从 1 到 a 遍历,检查每个整数 i 是否为 a 的因数
- 如果 a % i == 0,则 i 是 a 的因数,将其输出
- 按从小到大的顺序输出所有因数
代码实现
#include <iostream>
using namespace std;
int main() {
int a; // 定义变量a,存储输入的整数
cin >> a; // 输入整数a
int i = 1; // 初始化测试值为1
while (i <= a) { // 当i小于等于a时继续循环
if (a % i == 0) { // 检查i是否为a的因数
cout << i << endl; // 如果是因数,则输出i
}
i++; // i自增1,测试下一个整数
}
return 0;
}
代码分析
- 使用取模运算(%)检查整除性,判断因数关系
- while循环版本需要手动初始化和递增循环计数器i
- 输出采用逐行打印方式,每个因数占一行
- 时间复杂度为O(n),其中n为输入的正整数a
注意事项
- 循环范围需要包含1和a本身,因为它们都是a的因数
- 确保按从小到大的顺序输出因数
- 根据题目要求,不要输出任何提示信息
- 对于较大的输入值,O(n)的算法可能效率不高
- 每个因数需要单独占一行输出
关键点
- 理解因数的定义:b是a的因数当且仅当a能被b整除
- 使用取模运算符(%)检查整除性
- 遍历方法的选择(从1到a逐个检查)
- 输出格式的严格控制
- 对于特殊输入(如1)的正确处理
编程题2:小杨报数
问题描述
小杨需要从1到N报数。在报数过程中,小杨只报哪些M的倍数。例如,如果N = 5,M = 2,那么小杨就只需要报出1、3、5。
现在,请你代替小杨报数。
输入描述
输入2行,第一行一个整数N(1 ≤ N ≤ 1,000);第二行一个整数M(2 ≤ M ≤ 100)。
输出描述
输出若干行,依次表示小杨的报数。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯,但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入1
5
2
样例输出1
1
3
5
样例输入2
10
3
样例输出2
1
2
4
5
7
8
10
解题思路
- 读取整数N和M
- 从1到N遍历每个整数
- 对于每个整数i,检查i是否不是M的倍数(i % M != 0)
- 如果i不是M的倍数,则输出i
- 按顺序输出所有符合条件的数
代码实现
#include <stdio.h>
int main(int argc, char **argv) {
int n, m; // 定义变量n和m
scanf("%d", &n); // 输入整数n
scanf("%d", &m); // 输入整数m
int i = 1; // 初始化循环变量为1
while(i <= n) { // 当i小于等于n时继续循环
if(i % m != 0) // 检查i是否不是m的倍数
printf("%dn", i); // 如果不是m的倍数,则输出i
i++; // i自增1
}
return 0;
}
代码分析
- 使用条件判断(i % m != 0)筛选需要报出的数字
- while循环版本需要手动管理循环变量i
- 使用printf函数输出结果,每个数字占一行
- 每次判断都是独立的,时间复杂度为O(n)
注意事项
- 理解”报不是M的倍数”的含义:输出那些不能被M整除的数
- 确保输出格式正确,每个数字占一行
- 不要添加任何提示性文字,只输出纯数字
- 循环范围必须是从1到N
- 对于大数据量输入,时间复杂度为O(n)
关键点
- 使用取模运算(%)判断数字是否为另一个数的倍数
- 理解逻辑:报出的是那些”不是M的倍数”的数
- 输出格式的控制:每个数字单独占一行
- 循环边界的设置:从1到N
- 条件判断的准确性