Day 001:PAT练习--1091 N-自守数 (15 分)
体验了一阵子现代生活后,朕发现敲代码还是挺有意思的。所以从今天开始,小编秦始皇开始记录朕做PAT题目的过程辣,那话不多说,开始今天的题目了:
题目描述:
如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。例如 3×92^2 = 25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。
本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。
输入格式:
输入在第一行中给出正整数 M(≤20),随后一行给出 M 个待检测的、不超过 1000 的正整数。
输出格式:
对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK^2 的值,以一个空格隔开;否则输出 No。注意题目保证 N<10。
输入样例:
3
92 5 233
输出样例:
3 25392
1 25
No
可见题意一目了然,实在不需要朕多bbll了。话不多说,上代码:
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int m;//m <= 20
cin >> m;
bool cnt = 0;
for(int i = 0; i < m; i++){
int temp;// 0 < temp <= 1000
cin >> temp;
if(temp > 0 && temp < 10){
for(int j = 1; j < 10; j++){
if((temp * temp * j) % 10 == temp){
cout << j << " " << temp * temp * j;
cnt = true;
break;
}
}
if(cnt == false){
cout << "No";
}
}else if(temp >= 10 && temp < 100){
for(int k = 1; k < 10; k++){
if((temp * temp * k) % 100 == temp){
cout << k << " " << temp * temp * k;
cnt = true;
break;
}
}
if(cnt == false){
cout << "No";
}
}else if(temp >= 100 && temp < 1000){
for(int l = 1; l < 10; l++){
if((temp * temp * l) % 1000 == temp){
cout << l << " " << temp * temp * l;
cnt = true;
break;
}
}
if(cnt == false){
cout << "No";
}
}else if(temp == 1000){
cout << "No";
}
cnt = false;
if(i != m - 1){
cout << endl;
}
}
return 0;
}
这道题比较简单,但是个人认为有这么几个需要注意的地方:
1、注意样例中的输出格式是非常重要的!!!这道题就是因为朕不知道要把no写成样例里的“No”,而写成了“NO”,因此浪费了很多时间调试代码。因此以后做题要好好读样例,不要看到题很简单就直接去做了。所谓“千里之堤,溃于蚁穴”就是这样。
2、在需要输出No的时候,要看好了是在1-9所有数字全部与给定数平方相乘仍无法满足自守的条件时输出,因此No输出语句要放在if-else语句的for循环之外;还有别忘了设置一个bool量cnt,用来判断是否需要输出No,否则则会不论什么情况都会输出No导致出错。
3、PAT的格式要求往往比较严格,通常来说,如果有多行输出,则最后一行不换行,因此在大for循环的末尾要加上一个特判条件,如果当前不是最后一次循环,则换行。
4、因为输入数的范围是1-1000,因此需要设置四个if-else判断条件用于不同位数的取余,当然为了代码的简洁也可以编写特定函数用于取余。下面是另一位dl编写的代码,与我的区别仅仅在于取余时编写了一个特定的函数(我也会 只是懒得写):
#include <iostream>
using namespace std;
int factory(int n) {
int sum = 10;
while (n /= 10)
sum *= 10;
return sum;
}
int main() {
int M;
cin >> M;
while (M--) {
int K, flag = 1;
cin >> K;
for (int i = 0; i < 10; ++i) {
if (K * K * i % factory(K) == K) {
cout << i << " " << K * K * i << endl;
flag = 0;
break;
}
}
if (flag) cout << "No" << endl;
}
}
总结一下:
反正这里也没人看见,稍微多说点...
本着互联网最初的开源精神,希望能尽自己所能与同样正在努力中的同俦分享。。。好吧编不下去了,不管怎么说,写博客还是挺好玩的。
朕稍微是有点后悔的,前两年没有好好学习,现在想想错过了很多机会。不过还好现在朕还算是有了比较明确的目标,虽然朕长期以来不好的学习习惯,以及之前与人落下的功课仍在,但是朕觉得从现在开始,每天坚持努力一些,长此以往,一定会有成效的。毕竟朕也是很聪明的,就像朕的一个朋友说的:只要是向着正确的方向走,总会看到出口的,并且那一天会来的很快。
最后贴几句今天看到的话:
“妖怪在这个世界上存在,是有一定道理的,然而,只要有战胜妖怪的那份斗志,就能够百战百胜,远离危险,战胜困难!”
“还有,勇士经常是孤独的。勇士必须连续作战,保持胜利战果,所以就变得非常孤独。”
“你能忍耐吗?”
最新文章
- iOS中UI阶段常用的一些方法
- WebAdaptor Object reference not set to an instance of an object.
- 在页面头部<;!DOCTYPE html ....>; 前面不能有任何输出
- atom 折腾记(转载的)
- NSIS
- eclipse 编辑器的使用
- Newtonsoft.Json同时对多个时间字段以不同的格式序列化
- 新增tab页无法获取到数据,原来是URL的rewrite配置文件忘了修改
- SQL 增加或删除一列
- 转 批处理 %~dp0的意义
- 8、flask之flask-script组件
- ubuntu Emergency Mode
- BOM(浏览器对象模型)的一些操作
- Vue数据双向绑定原理及简单实现
- 作业2:分布式版本控制系统Git的安装与使用
- Android中不显示标题
- python运算符优先级
- centos6.5新增加硬盘挂载并实现开机自动挂载
- Docker存出载入镜像
- strus2 struts.xml详解
热门文章
- 序列化与反序列化、def的介绍与快速使用、cbv源码分析、APIView与request对象分析
- win10关于后缀名无法关联相应程序默认打开方式的处理方法
- 什么是 Hystrix 断路器?我们需要它吗?
- 事务的 ACID 是指什么?
- Java中自动装箱与拆箱
- Java 中应该使用什么数据类型来代表价格?
- js--事件循环机制
- .NET面试经典三问:什么是.NET?什么是.NET Framework?什么是.NET Core?
- 3_Phase Portrait_相图_相轨迹
- 2022首场MASA技术团队黑客松赛事大赛完美落幕!精彩集锦