小韦老师@神犇营-my0097-判断能否被3,5,7整除
题目:
描述
给定一个整数,判断它能否被3,5,7整除,并输出以下信息:
1、能同时被3,5,7整除(直接输出3 5 7,每个数中间一个空格);
2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5或者 3 7或者5 7,中间用空格分隔);
3、只能被其中一个数整除(输出这个除数);
4、不能被任何数整除,输出小写字符‘n’,不包括单引号。
输入
输入一行,包括一个整数(<100)。
输出
输出一行,按照描述要求给出整数被 3,5,7 整除的情况。
输入样例1
105
输出样例1
3 5 7
题解:
思路:
整体思路:
对于一个数,若能整除 3, 5, 7 中的哪一个,则输出那个数字,比如能整除 3
则输出 3;能整除 5,则输出 5。
问题是,若都不能整除的时候,要输出一个 n。怎么知道某个数对于 3, 5, 7
都不能整除?
------做标记。
用一个 bool 型的变量做标记,false 代表一种情况,true 代表另一种情况。
例如此处可用 false 来代表某个数对于 3, 5, 7 都不能整除,用 true 来代
表某个数至少能被 3, 5, 7 中的一个数整除。
判断过程中,若 3 能整除这个数,则输出 3,并且将标记置为 true,说明 3,
5,7 中可以有可以整除这个数的;若 5 能整除这个数,则输出 5,并且将标记
置为 true,说明 3,5,7 中可以有可以整除这个数的;若 7 能整除这个数,则
输出 7,并且将标记置为 true,说明 3,5,7 中可以有可以整除这个数的。
判断结束之后,若标志还是 false,说明都不能整除这个数,则输出 n。
具体步骤:
1.定义一个变量 num,用来存储输入的数。并输入 num。
2.定义一个 bool 型的变量,作为标志(也可以说成设置一个标志):
// 设置一个 bool 型的变量作为标志,false 代表 3,5,7 都不能整除 num
// 初始化为 false,假设 3,5,7 都不能整除 num
bool flag = false;
3.若 num 能被 3 整除,则输出 3 和空格,并将 flag 置为 true:
if (num % 3 == 0) { // 若 num 能被 3 整除
cout << 3 << " "; // 输出 3 和空格
flag = true; // flag 置为 true,说明 3,5,7 中已经有数可以整除 num
}
4.若 num 能被 5 整除,则输出 5 和空格,并将 flag 置为 true。
5.若 num 能被 7 整除,则输出 7 和空格,并将 flag 置为 true。
6.若最后 flag 的值为 false,说明没有一个数能整除 num,则输出 n:
// 等同于 if(flag == fasle)
// 若 f 的值为 false,则说明 3,5,7 都不能整除 num
if (!flag) {
cout << "n"; // 输出 n
}
思考:
1°想一想可以反过来表示麽?也即 false 代表至少有一个能整除,true 表示都
不能整除。如果可以,想一想为什么?若不可以,请说明理由。
2°若有多种状态应该怎么标记呢?
完整代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int num;
cin >> num;
// 设置一个 bool 型的变量作为标志,false 代表 3,5,7 都不能整除 num
// 初始化为 false,假设 3,5,7 都不能整除 num
bool flag = false;
if (num % 3 == 0) { // 若 num 能被 3 整除
cout << 3 << " "; // 输出 3 和空格
flag = true; // flag 置为 true,说明 3,5,7 中已经有数可以整除 num
}
if (num % 5 == 0) { // 若 num 能被 5 整除
cout << 5 << " "; // 输出 5 和空格
flag = true; // flag 置为 true,说明 3,5,7 中已经有数可以整除 num
}
if (num % 7 == 0) { // 若 num 能被 7 整除
cout << 7 << " "; // 输出 7 和空格
flag = true; // flag 置为 true,说明 3,5,7 中已经有数可以整除 num
}
// 等同于 if(flag == fasle)
// 若 f 的值为 false,则说明 3,5,7 都不能整除 num
if (!flag) {
cout << "n"; // 输出 n
}
return 0;
}