【题目描述】
给定一个整数,判断它能否被33,55,77整除,并输出以下信息:
1、能同时被33,55,77整除(直接输出3 5 7
,每个数中间一个空格);
2、只能被其中两个数整除(输出两个数,小的在前,大的在后。例如:3 5
或者3 7
或者5 7
,中间用空格分隔);
3、只能被其中一个数整除(输出这个除数);
4、不能被任何数整除,输出小写字符‘n
’,不包括单引号。
【解题思路】
这个问题实际上涉及到几个关键的数学和逻辑判断点:
-
基本的除法判断:检查一个数是否能被另一个数整除的基本方法是使用模运算(%),如果模的结果为0,则说明能整除。
-
多重条件判断:我们需要检查一个数是否能同时被3、5、7整除,或者只能被其中两个数整除,或者只能被其中一个数整除,最后还要处理完全不能被这些数整除的情况。
-
输出格式:根据不同的情况,需要输出不同格式的信息,需要对字符串输出和格式化。
#include <iostream>
using namespace std;
int main() {
int num;
cin >> num; // 读取输入的整数
bool divisibleBy3 = (num % 3 == 0);
bool divisibleBy5 = (num % 5 == 0);
bool divisibleBy7 = (num % 7 == 0);
// 判断能否同时被3, 5, 7整除
if (divisibleBy3 && divisibleBy5 && divisibleBy7) {
cout << "3 5 7";
}
// 判断只能被其中两个数整除
else if ((divisibleBy3 && divisibleBy5) || (divisibleBy3 && divisibleBy7) || (divisibleBy5 && divisibleBy7)) {
if (divisibleBy3 && divisibleBy5)
cout << "3 5";
if (divisibleBy3 && divisibleBy7)
cout << "3 7";
if (divisibleBy5 && divisibleBy7)
cout << "5 7";
}
// 判断只能被其中一个数整除
else if (divisibleBy3 || divisibleBy5 || divisibleBy7) {
if (divisibleBy3)
cout << "3";
if (divisibleBy5)
cout << "5";
if (divisibleBy7)
cout << "7";
}
// 不能被任何数整除
else {
cout << 'n';
}
return 0;
}
这段代码首先读取输入的整数,然后分别判断该数是否能被3、5、7整除。根据判断的结果,选择合适的输出。这种结构清晰地展示了如何根据不同的条件分支执行不同的操作,是解决这类问题的一个典型方法。
先框选出它的范围,然后在范围内再次进行判断。结构比较清晰。
当然也可以分开去判断,利用if elseif else 的特性。像这个样子:
#include<iostream>
using namespace std;
int main()
{
int a;
cin >> a;
if(a % 3 == 0 && a % 5 == 0 && a % 7 == 0)
cout << "3 5 7";
else if(a % 3 == 0 && a % 5 == 0 && a % 7 != 0)
cout << "3 5";
else if(a % 3 == 0 && a % 5 != 0 && a % 7 == 0)
cout << "3 7";
else if(a % 3 == 0 && a % 5 != 0 && a % 7 != 0)
cout << "3";
else if(a % 3 != 0 && a % 5 == 0 && a % 7 == 0)
cout << "5 7";
else if(a % 3 != 0 && a % 5 == 0 && a % 7 != 0)
cout << "5";
else if(a % 3 != 0 && a % 5 != 0 && a % 7 == 0)
cout << "7";
else if(a % 3 != 0 && a % 5 != 0 && a % 7 != 0)
cout << "n";
return 0;
}
你喜欢哪一种方法呢?
当然还有我们的数组大法。让代码看起来更精简:
#include<iostream>
using namespace std;
int main()
{
int a, d[3] = {3, 5, 7};
cin >> a;
bool isok = false;
for(int i = 0; i < 3; ++i)
{
if(a % d[i] == 0)
{
cout << d[i] << ' ';
isok = true;
}
}
if(isok == false)
cout << 'n';
return 0;
}
【代码解析】
1using namespace std;
这行代码让你可以直接使用std
命名空间下的函数和对象,而不需要每次都加上std::
前缀。
int main()
{
int a, d[3] = {3, 5, 7};
这里定义了主函数main()
,并声明了两个整型变量。a
用于存储输入的整数,d
是一个数组,存储了3、5、7三个整数,这是你要检查的除数。
1 cin >> a;
从标准输入读取一个整数到变量a
中。
1 bool isok = false;
定义一个布尔变量isok
,用于标记是否已经有数被输出。初始值为false
,表示还没有输出。
for(int i = 0; i < 3; ++i)
{
if(a % d[i] == 0)
{
cout << d[i] << ' ';
isok = true;
}
}
使用一个for
循环遍历数组d
中的每一个元素,检查a
是否能被当前元素整除。如果可以整除,就输出该元素并设置isok
为true
。注意,这里的输出后面跟了一个空格,以便多个输出之间有适当的间隔。
if(isok == false)
cout << 'n';
循环结束后,如果isok
仍然为false
,说明a
不能被3、5、7中的任何一个数整除,因此输出小写字母n
。
return 0;
}
结束主函数并返回0,表示程序正常结束。