目录
试题A:立方和(填空题5分)
-
题目描述
小明对数位中含有2、0、1、9的数字很感兴趣,在1到40中这样的数包括1、2、9、10至32、39、40,共28个,它们的和是574,平方和是14362,立方和是400816.
请问,在1到2019中,所有这样的数的立方和是多少? -
题目思路
求数字的立方和很简单,题目却做出了一个限制,便是在1至2019中包含2、0、1、9四个数字之一的数。这个只需要一个取余运算便可进行判断。另外一个重要的点就是计算数据的溢出问题,因此选取double类型。 -
题目代码
#include<bits/stdc++.h>
using namespace std;
bool ifCon(int n){
while(n){
int temp=n%10;
if(temp==2 || temp==0 || temp==1 || temp==9){
return true;
}
n/=10;
}
return false;
}
int main() {
long long sum=0;
for(int i=1;i<=2019;i++){
if(ifCon(i)){
sum+=pow(i,3);
}
}
cout<<sum<<endl; // 结果是:4097482414389
return 0;
}
试题B:字串数字(5分)
-
问题描述
小明用字母A对应数字1,B对应2,以此类推,用Z代表26.对应于27以上的数字,小明用两位或更长位的字符串来对应,例如AA对应27,AB对应28,AZ对应52,LQ对应329。
请问,LANQIAO对应的数字是多少? -
思路
简单来看,就是将10进制变成26进制,仿写26进制来做出答案。但此题是个填空题,使用计算器暴力解决是简单的。 -
题目代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string list="ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string x="LANQIAO";
long long sum=0;
int y=0; //保存次方
for(int i=x.length()-1;i>=0;i--,y++){
int temp=list.find(x[i])+1;
sum+=temp*pow(26,y);
}
cout<<sum<<endl; // 结果是:3725573269
return 0;
}
试题C:质数
-
问题描述
我们知道第一个质数是2,第二个质数是3,第三个质数是5······请你计算第2019个质数是多少? -
思想
这道题就是计算质数,使用循环进行暴力计算,计算到2019个质数退出循环。 -
题目代码
#include<bits/stdc++.h>
using namespace std;
bool isPrime(int n)
{
// 判断n是否为质数,根据定义直接判断从2到n-1是否存在n的约数即可
for(int i=2; i<n; i++)
{
if(n%i==0)
{
return false;
}
}
return true;
}
int main()
{
int count=1;//2是素数
int i=2;
while(count!=2019)
{
i++;//从3开始判断
if(isPrime(i))
{
count++;
}
}
cout<<i<<endl; //结果是:17569
}
试题D:最短路(10分)
- 问题描述
如下图所示,G是一个无向图,其中蓝色边的长度是1,橘色边的长度是2,绿色边的长度是3,计算从A到S的最短距离是多少?6 A–>B–>J–>S
- 思路
这个题是最短路径问题。简单的思路就是,一个数组,存储两点之间的距离,然后定义一个数组记录始点到终点的最短距离。例如:A->E,A->D,A->C,A->B,存储之间的距离,为1,1,1,2;然后E->I,E->D,E->H,D->I,D->H,D->G,D->E,D->C······距离分别为3,1,1,1,2,1,2,1,2·····依次存储,得出A->S的最短距离并输出。
试题E:RSA解密(15分)
- 题目描述
RSA是一种经典的加密算法。它的基本加密过程如下。
首先生成两个大质数p,q, 令n = pq,设d与(p-1)(q-1)互质,则 可以找到e,使得de除以(p-1)(q-1)的余数为1。
n,d,e组成了私钥,n,d构成了公钥。
当使用公钥加密一个整数X时(X<=n-1),计算C = X^d mod n,则C是加密后的密文。
当收到密文C时,可以使用私钥解开,计