牛客刷题系列
@[toc]
> 很多小伙伴为了刷题发愁
> 今天为大家推荐一款刷题神奇哦:[刷题面试神器牛客](https://www.nowcoder.com/link/pc_csdncpt_xfh_sf)
> 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官
# 一:自守数
* 题目:([题目链接](https://www.nowcoder.com/practice/88ddd31618f04514ae3a689e83f3ab8e?tpId=37&&tqId=21322&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking))
![在这里插入图片描述](https://img-blog.csdnimg.cn/92d2cf68ad264f909110b4d527b50f01.png)
* 代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
bool isnot(int i)
{
if(i==0)
return true;
int a = i*i;
int sum= 0;
int j=1;
while(a!=0)
{
if(sum == i)
return true;
else
{
int tem =a%10;
for(int k=1;k<j;k++)
tem*=10;
j++;
sum+=tem;
a=a/10;
}
}
if(sum== i)
return true;
else
return false;
}
int main(){
int n;
cin>> n;
int count=0;
for(int i=0;i<=n;i++)
{
if(isnot(i))
count++;
}
cout<<count;
}
```
* 思路:
1. 首先要明白自守数的定义:自守数是指一个数的平方的尾数等于该数自身的自然数。
2. 计算:通过暴力枚举法依次计算
# 二:返回小于 N 的质数个数
## 1.题目
[题目链接](https://www.nowcoder.com/practice/9e7a88d6a00e404c8418602515a5046c?tpId=182&&tqId=34812&rp=1&ru=/ta/exam-all&qru=/ta/exam-all/question-ranking)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8aaa4336b92d458cba7db7396336e8c1.png)
## 2.代码实现
```cpp
#include <iostream>
#include <string>
#include<math.h>
using namespace std;
bool isnot(int a)
{
for(int i=2;i<=sqrt(a);i++)
{
if(a%i==0)
return false;
}
return true;
}
int main(){
int n;
cin>> n;
int count=0;
for(int i=2;i<=n;i++)
{
if(isnot(i))
count++;
}
cout<<count;
}
```
## 3.思路和要注意的细节
![在这里插入图片描述](https://img-blog.csdnimg.cn/6bfeaee060a24d3080efb00732e8fc9e.png)
> 注意题目要求,所以我用的是 for(int i=2;i<=sqrt(a);i++) 这个循环来判断
# 三:第一个只出现一次的字符
## 1.题目
[题目链接](https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=188&&tqId=38575&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking)
![在这里插入图片描述](https://img-blog.csdnimg.cn/638e50c47da84f50ab51a5691f24f0f3.png)
## 2.代码实现
```cpp
class Solution {
public:
int FirstNotRepeatingChar(string str) {
map<char,int> m;
for(int i=0;i<str.size();i++)
{
m[str[i]]++;
}
for(int i=0;i<str.size();i++)
{
if(m[str[i]]==1)
{
return i;
}
}
return -1;
}
};
```
## 思路和注意的点
> 这个题,主要就是用了map的特性,关于map的特性,可以看下我另外一篇文章[C++精通之路:map和set](https://blog.csdn.net/yin_***/article/details/124713333)
# ps
> 想和博主一样刷优质面试和算法题嘛,快来[刷题面试神器牛客](https://www.nowcoder.com/link/pc_csdncpt_xfh_sf)吧,期待与你在牛客相见
> 很多小伙伴为了刷题发愁
> 今天为大家推荐一款刷题神奇哦:[刷题面试神器牛客](https://www.nowcoder.com/link/pc_csdncpt_xfh_sf)
> 各大互联网大厂面试真题。从基础到入阶乃至原理刨析类面试题 应有尽有,赶快来装备自己吧!助你面试稳操胜券,solo全场面试官
# 一:自守数
* 题目:([题目链接](https://www.nowcoder.com/practice/88ddd31618f04514ae3a689e83f3ab8e?tpId=37&&tqId=21322&rp=1&ru=/ta/huawei&qru=/ta/huawei/question-ranking))
![在这里插入图片描述](https://img-blog.csdnimg.cn/92d2cf68ad264f909110b4d527b50f01.png)
* 代码:
```cpp
#include <iostream>
#include <string>
using namespace std;
bool isnot(int i)
{
if(i==0)
return true;
int a = i*i;
int sum= 0;
int j=1;
while(a!=0)
{
if(sum == i)
return true;
else
{
int tem =a%10;
for(int k=1;k<j;k++)
tem*=10;
j++;
sum+=tem;
a=a/10;
}
}
if(sum== i)
return true;
else
return false;
}
int main(){
int n;
cin>> n;
int count=0;
for(int i=0;i<=n;i++)
{
if(isnot(i))
count++;
}
cout<<count;
}
```
* 思路:
1. 首先要明白自守数的定义:自守数是指一个数的平方的尾数等于该数自身的自然数。
2. 计算:通过暴力枚举法依次计算
# 二:返回小于 N 的质数个数
## 1.题目
[题目链接](https://www.nowcoder.com/practice/9e7a88d6a00e404c8418602515a5046c?tpId=182&&tqId=34812&rp=1&ru=/ta/exam-all&qru=/ta/exam-all/question-ranking)
![在这里插入图片描述](https://img-blog.csdnimg.cn/8aaa4336b92d458cba7db7396336e8c1.png)
## 2.代码实现
```cpp
#include <iostream>
#include <string>
#include<math.h>
using namespace std;
bool isnot(int a)
{
for(int i=2;i<=sqrt(a);i++)
{
if(a%i==0)
return false;
}
return true;
}
int main(){
int n;
cin>> n;
int count=0;
for(int i=2;i<=n;i++)
{
if(isnot(i))
count++;
}
cout<<count;
}
```
## 3.思路和要注意的细节
![在这里插入图片描述](https://img-blog.csdnimg.cn/6bfeaee060a24d3080efb00732e8fc9e.png)
> 注意题目要求,所以我用的是 for(int i=2;i<=sqrt(a);i++) 这个循环来判断
# 三:第一个只出现一次的字符
## 1.题目
[题目链接](https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=188&&tqId=38575&rp=1&ru=/activity/oj&qru=/ta/job-code-high-week/question-ranking)
![在这里插入图片描述](https://img-blog.csdnimg.cn/638e50c47da84f50ab51a5691f24f0f3.png)
## 2.代码实现
```cpp
class Solution {
public:
int FirstNotRepeatingChar(string str) {
map<char,int> m;
for(int i=0;i<str.size();i++)
{
m[str[i]]++;
}
for(int i=0;i<str.size();i++)
{
if(m[str[i]]==1)
{
return i;
}
}
return -1;
}
};
```
## 思路和注意的点
> 这个题,主要就是用了map的特性,关于map的特性,可以看下我另外一篇文章[C++精通之路:map和set](https://blog.csdn.net/yin_***/article/details/124713333)
# ps
> 想和博主一样刷优质面试和算法题嘛,快来[刷题面试神器牛客](https://www.nowcoder.com/link/pc_csdncpt_xfh_sf)吧,期待与你在牛客相见