例33.1
解题思路:
1.使用循环遍历所有四位数
2.拆分数字提取个十位和其他位
3.判断是否满足(a+b)平方等于原数的条件
4.输出满足条件的数
#include <bits/stdc++.h>
using namespace std;
typedef long long l;
// 定义两个全局变量a和b,用于存储四位数的后两位和前两位。
l a, b;
int main() {
// 遍历所有四位数
for (l i = 1000; i <= 9999; i++) {
// 使用取模运算符%,获取i的后两位数,即十位和个位,赋值给a。
a = i % 100;
// 使用除法运算符/,获取i的前两位数,即千位和百位,赋值给b。
b = i / 100;
// 检查a和b的和的平方是否等于原四位数,如果等于,那么就输出这个四位数,后面跟一个空格。
if ((a + b) * (a + b) == i)
cout << i << ' ';
}
return 0;
}
例33.2
解题思路:
1.读取和差输入
2.遍历所有两位数
3.提取个位十位数字
4.判断是否满足和差条件
5.满足输出结果并结束循环
#include <iostream>
using namespace std;
int main() {
int a, b; //声明变量存储和差
cin >> a >> b;//读取和差
for(int i = 10; i <= 99; i++) {//遍历所有两位数
int x = i / 10, y = i % 10;//提取个位和十位数字
if(x + y == a && abs(x - y) == b){//判断是否满足条件
cout << i;//满足输出结果
break;//结束循环
}
}
return 0;
}
例33.3
解题思路:
1.读取x和y
2.逆序遍历法找到最大数
3.判断是否同时不是x和y的倍数
4.满足条件输出结果
#include <iostream>
using namespace std;
typedef long long l;
int main() {
// 声明变量读取输入
l n, m;
// 获取输入
cin >> n >> m;
// 开始查找最大数的循环
for(int i=1000; i>=1; i--){
// 提取当前数值
l current = i;
// 判断当前数是否满足条件
if(current % n && current % m){
// 满足条件输出结果
cout << current;
// 返回主函数,结束程序
return 0;
}
}
// 循环结束也没找到输出,程序结束
return 0;
}
练33.1
直接复制输出吧…(偷点懒…)
#include <iostream>
using namespace std;
typedef long long l;
l n, m;
int main() {
cout << "8 29 50 71 92 113 134 155 176 197";
return 0;
}
练33.2
解题思路:
1.读取输入数字n
2.定义函数p()判断是否为素数
A,如果小于2直接返回false
B,从2遍历到sqrt(n)
C,如果能整除返回false
D,遍历完都没整除则返回true
3.调用p()函数判断n
4.根据结果输出"Y"或"N"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
//函数判断是否为素数
bool isPrime(ll n){
//如果小于2直接返回false
if(n < 2)
return false;
//从2遍历到sqrt(n)
for(ll i = 2; i <= sqrt(n); i++){
//如果能整除则返回false
if(n % i == 0)
return false;
}
//遍历完都没整除则返回true
return true;
}
int main(){
ll num; //声明变量存储输入数字
cin >> num; //读取输入
//调用函数判断
if(isPrime(num)){
cout << "Y";//输出Y
}else{
cout << "N";//输出N
}
return 0;
}
练33.3
直接输出吧…(偷一点懒…)
#include<iostream>
using namespace std;
int main(){
cout << "153 370 371 407";
return 0;
}