体验了一阵子现代生活后,朕发现敲代码还是挺有意思的。所以从今天开始,小编秦始皇开始记录朕做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;
}
}

总结一下:

  反正这里也没人看见,稍微多说点...

  本着互联网最初的开源精神,希望能尽自己所能与同样正在努力中的同俦分享。。。好吧编不下去了,不管怎么说,写博客还是挺好玩的。

  朕稍微是有点后悔的,前两年没有好好学习,现在想想错过了很多机会。不过还好现在朕还算是有了比较明确的目标,虽然朕长期以来不好的学习习惯,以及之前与人落下的功课仍在,但是朕觉得从现在开始,每天坚持努力一些,长此以往,一定会有成效的。毕竟朕也是很聪明的,就像朕的一个朋友说的:只要是向着正确的方向走,总会看到出口的,并且那一天会来的很快。

  最后贴几句今天看到的话:

  “妖怪在这个世界上存在,是有一定道理的,然而,只要有战胜妖怪的那份斗志,就能够百战百胜,远离危险,战胜困难!”

  “还有,勇士经常是孤独的。勇士必须连续作战,保持胜利战果,所以就变得非常孤独。”

  “你能忍耐吗?”

Day 001:PAT练习--1091 N-自守数 (15 分)的更多相关文章

  1. PAT Basic 1091 N-自守数 (15 分)

    如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数. 本题就请你编写程序判断一个给定的 ...

  2. 1091 N-自守数 (15 分)C语言

    如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为"N-自守数".例如 3×92^​2​​ =25392,而 25392 的末尾两位正好是 92,所以 ...

  3. 1091 N-自守数 (15 分)

    // 建一个判断函数,接受两个整形的变量,再通过循环按位判断相等与否,主体函数中调用被调函数,建立一个判断变量.#include <iostream> using namespace st ...

  4. PAT乙级:1056 组合数的和 (15分)

    PAT乙级:1056 组合数的和 (15分) 给定 N 个非 0 的个位数字,用其中任意 2 个数字都可以组合成 1 个 2 位的数字.要求所有可能组合出来的 2 位数字的和.例如给定 2.5.8,则 ...

  5. 【PAT】B1056 组合数的和(15 分)

    就看着代码量一直到没什么好说的了 #include<stdio.h> int main(){ int N,K;scanf("%d",&N); int sum=0 ...

  6. 【PAT】1016 部分A+B(15 分)

    1016 部分A+B(15 分) 正整数 A 的“D​A​​(为 1 位整数)部分”定义为由 A 中所有 D​A​​ 组成的新整数 P​A​​.例如:给定 A=3862767,D​A​​=6,则 A  ...

  7. PAT Basic 1011 A+B 和 C (15 分)

    给定区间 [−] 内的 3 个整数 A.B 和 C,请判断 A+B 是否大于 C. 输入格式: 输入第 1 行给出正整数 T (≤),是测试用例的个数.随后给出 T 组测试用例,每组占一行,顺序给出  ...

  8. PAT Basic 1086 就不告诉你 (15 分)

    做作业的时候,邻座的小盆友问你:“五乘以七等于多少?”你应该不失礼貌地围笑着告诉他:“五十三.”本题就要求你,对任何一对给定的正整数,倒着输出它们的乘积. 输入格式: 输入在第一行给出两个不超过 10 ...

  9. PAT Basic 1036 跟奥巴马一起编程 (15 分)

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014 年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个 ...

随机推荐

  1. C++设计模式 - 总结

    一个目标:管理变化,提高复用 掌握设计模式一个核心目标:管理变化,提高复用.在使用设计模式中发现并没有实现复用,这就和设计初衷相违背了,说明代买写的不好. 两种手段:分解VS.抽象 在代码设计中,该开 ...

  2. webdriver原理及操作

    webdriver原理: 1. WebDriver 启动目标浏览器,并绑定到指定端口.该启动的浏览器实例,做为 webdriver 的 remote server. 2. Client 端通过 Com ...

  3. C++ 关于map,function的简单应用

    map<string,function<int(int, int)>> funs =    {        {"+", add},        {&qu ...

  4. SpringMVC源码解读 - RequestMapping注解实现解读

    SpringMVC源码解读 - RequestMapping注解实现解读 - RequestCondition体系  https://www.cnblogs.com/leftthen/p/520840 ...

  5. A5/web项目连接Oracle 12c数据库报:ORA-01017: 用户名/口令无效

    解决办法: 修改Oracle12c用户名密码,再改回来,就ok了,亲测有效.

  6. 什么是 CAS?

    CAS 是 compare and swap 的缩写,即我们所说的比较交换. cas 是一种基于锁的操作,而且是乐观锁.在 java 中锁分为乐观锁和悲观锁.悲观锁是将资源锁住,等一个之前获得锁的线程 ...

  7. linux文本编辑器vim详解

    vim 1.打开文件 vim [option] - file... 打开文件 +# 打开文件后,让光标处于第#行的行首 +/字符串 打开文件后,光标处于第一个被匹配到字符串的行首 -b file 二进 ...

  8. Netty学习摘记 —— UDP广播事件

    本文参考 本篇文章是对<Netty In Action>一书第十三章"使用UDP广播事件"的学习摘记,主要内容为广播应用程序的开发 消息POJO 我们将日志信息封装成名 ...

  9. 3. Git安装和使用

    3. Git安装和使用 目的 通过git管理github托管项目代码 下载安装 1)GIt官网下载:https://www.git-scm.com/download/win 2)双击安装 3)选择安装 ...

  10. MOS管驱动电路,看这里就啥都懂了

    一.MOS管驱动电路综述在使用MOS管设计开关电源或者马达驱动电路的时候,大部分人都会考虑MOS的导通电阻,最大电压等,最大电流等,也有很多人仅仅考虑这些因素.这样的电路也许是可以工作的,但并不是优秀 ...