网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
string int_str(int a)
{
string out;
stringstream Convert;
Convert<<a;
Convert>>out;
return out;
}
int main()
{
int a=0;
cin>>a;
long long sum=0;
for(int i=1; i<=a; ++i)
{
string str = int_str(i);
if(str.find(‘2’,0)!=string::npos||str.find(‘0’,0)!=string::npos||str.find(‘1’,0)!=string::npos||str.find(‘9’,0)!=string::npos)
sum += pow(i,3);
}
cout<<sum<<endl;
return 0;
}
**答案:** 4097482414389
---
### 试题B:子串数字
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416091522478.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dqaW5qaWU=,size_16,color_FFFFFF,t_70)
**解析:**
#include
#include<math.h>
using namespace std;
int main()
{
long long sum=0;
int num=0;
string s;
cin>>s;
for(int i=0; i<s.size(); ++i)
{
num = s[s.size()-1-i]-‘A’+1;
sum += num*pow(26, i);
}
cout<<sum<<endl;
return 0;
}
**答案:** 3725573269
---
### 试题C:质数
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416132508741.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dqaW5qaWU=,size_16,color_FFFFFF,t_70)
**解析:**
#include
#include<math.h>
using namespace std;
//判断n是否是质数,n>=1
bool isZS(int n)
{
if(n1||n2||n3)
return true;
else
{
for(int i=2; i<=sqrt(n); ++i)
{
if(n%i0)
return false;
}
return true;
}
}
int main()
{
int j=2,count=0;
while(count<2019)
{
if(isZS(j))
count++; //计数
j++;
}
cout<<j-1<<endl; //因为在while中最后是加1的,所以输出j-1
return 0;
}
**答案:** 17569
### 试题D: 最短路
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416134019268.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dqaW5qaWU=,size_16,color_FFFFFF,t_70)
**解析:** 本题是填空题,可直接看出答案为6,最佳路径:S-J-B-A或者S-M-L-H-D-A。
---
### 试题E: RSA解密
![在这里插入图片描述](https://img-blog.csdnimg.cn/2021041613444261.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dqaW5qaWU=,size_16,color_FFFFFF,t_70)
**解析:**
本题是填空题中最难的一道。本题涉及到很多数论的知识:质因子分解,扩展欧几里得算法,快速幂算法,利用快速乘算法求解快速幂(mod太大导致不能直接乘,而是需要使用加法来替代乘法)。另外还需要注意扩展欧几里得算法求解出来的乘法逆可能是负数,所以需要使用公式进行转换。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long LL;
/*
首先生成两个质数p, q,令n = p * q,设d 与(p -1)*(q -1) 互质,则可
找到e 使得d * e 除(p-1)*(q -1) 的余数为1。
现在你知道公钥中n = 1001733993063167141, d = 212353,同时你截获了别人发送的密文C = 20190324,请问,原文是多少?
当收到密文C 时,可使用私钥解开,计算公式为X = C^e mod n。答案:579706994112328949
*/
/*
p=891234941 q=1123984201
*/
//扩展欧几里得算法
void exgcd(LL a,LL b,LL&d,LL& x,LL& y){//d=gcd(a,b)
if(!b){
d=a;
x=1;
y=0;
}else{
exgcd(b,a%b,d,y,x);
y-=x*(a/b);
}
}
//快速乘
LL quickMul(LL a,LL b,LL mod){
LL ans=0;//这里初值为0
while(b){
if(b&1)
ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=1;
}
return ans%mod;
}
LL quickPower(LL a,LL b,LL mod){
LL ans=1;//注意这里初值是1
while(b){
if(b&1)
ans=quickMul(ans,a,mod)%mod;
a=quickMul(a,a,mod)%mod;
b>>=1;
}
return ans%mod;
}
int main(){
LL n=1001733993063167141;
//分解质因数
for(LL i=2;i*i<=n;i++){
while(n%i0){
//cout<<i<<" "<<n/i<<endl;//两个质数
n/=i;
}
}
LL p=891234941,q=1123984201;
LL mod=(p-1)*(q-1);
LL d=212353;
LL e,y,gcd;
//d*e1(%mod)
//扩展欧几里得算法
exgcd(d,mod,gcd,e,y);
e=(e%mod+mod)%mod;//这里是因为e可能为负数
//cout<<e<<endl;
LL c=20190324;
n=1001733993063167141;
//X = C^e mod n
LL x;
//快速幂和快速乘相结合
cout<<quickPower(c,e,n)<<endl;
return 0;
}
---
### 试题F: Fibonacci 数列与黄金分割
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210416134606984.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dqaW5qaWU=,size_16,color_FFFFFF,t_70)
**解析:**
#include
#include
using namespace std;
//Fibonacci 数列
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
i0l-1715709764955)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!