链接:https://www.nowcoder.com/questionTerminal/c8cfc98711a14a3fbc587ca5aabc09ee
来源:牛客网
[编程题]计算累计平方和.
热度指数:361时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 32M,其他语言64M
给定一个32位int型正整数,我们定义如下操作,取其十进制各位数字的平方和,并不断重复这个操作。如果某次操作完成后得到的结果是1,则返回true;否则继续执行,直到证明永远不会得到结果为1,返回false
input:19
output:true
原因:
1^2 + 9^2=82
8^2 + 2^2 = 68
6^2 + 8^2 = 100
1^2 + 0^2 + 0^2 = 1
链接:https://www.nowcoder.com/questionTerminal/c8cfc98711a14a3fbc587ca5aabc09ee
来源:牛客网
输入描述:
输入一个m(1<=m<=1000),表示查询组数。
接下来m行,每一行为一个32位int型正整数。
输出描述:
对于每次查询,如果满足题目描述,则输出"true",反之输出"false" (不要输出引号)
示例1
输入
2
19
7
输出
true
true
题目解析 【【牛客】快手2020校园招聘秋招笔试--算法A试卷】输入一个数如何判断累计平方和不为1 ? 如果进行一次平方和以后和不为1把当前值记录,重复n次后和为第一次和的值,那么就表示该数的平方和不可能为1。
#include
#include
#includeusing namespace std;
bool Find(int x, list List)
{
for (list::iterator iter = List.begin();
iter != List.end();
iter++)
{
if (*iter == x)
{
return true;
}
}
return false;
}
bool isOne(int num, int(*lib)[2], list List)
{
if (num == 1) return true;
//这里最重要的就是判断什么时候是false,其实就是循环了
//每次判断list中是否已经含有当前数字,如果有,那就不可能为1了;
if (Find(num, List))
{
return false;
}
//并且插入num
List.push_back(num);
int n = 0;
while (num > 0){
int tmp = num % 10;
n += lib[tmp][1];
num /= 10;
}
return isOne(n, lib, List);
}int main()
{
//建立一个二维数组,提高后面平方的运算速度
int (*lib)[2] = new int[10][2];
for (int i = 0;
i < 10;
i++) {
lib[i][0] = i;
lib[i][1] = i*i;
}
//输入数据
int n;
int x;
vector arr;
while (cin >> n)
{
//扩容否则无法存放输入数据
arr.resize(n);
for (int i = 0;
i < n;
i++)
{
cin >> x;
arr[i] = x;
}
//判断输入数据
for (int i = 0;
i < n;
i++)
{
list List;
if (isOne(arr[i], lib, List))
{
cout << "true" << endl;
}
else
{
cout << "false" << endl;
}
}
}
system("pause");
return 0;
}
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题