第二题:年号字串(本题总分:5 分)
小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27
以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对
应 28,AZ 对应 52,LQ 对应 329。
请问 2019 对应的字符串是什么?
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个大写英文字符串,在提交答案时只填写这个字符串,注意全部大写,填写多
余的内容将无法得分。
方法一:递归
#include<bits/stdc++.h>
using namespace std;
void solve(int n)
{
if(!n) return; //递归出口,n=0时
solve(n/26);
cout<<(char)(n%26+64);
}
int main()
{
solve(2019);
return 0;
}
方法二:使用栈,先进后出
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n=2019;
stack<int> s;
int temp;
while(n)
{
temp=n%26;
s.push(temp); //入栈
n/=26;
}
while(!s.empty())
{
char c=s.top()+64; //栈顶元素变为字母
cout<<c;
s.pop(); //从栈顶移除第一个元素
}
return 0;
}
第三题:数列求值 (本题总分:10 分)
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求
第 20190324 项的最后 4 位数字。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个 4 位整数(提示:答案的千位不为 0) ,在提交答案时只填写这个整数,填写
多余的内容将无法得分。
注意:(1)判断会爆long long!!!所以取余,只要后四位数!!!
(2)不必非用数组,每个都存进数组!!!如下面代码!!!
#include<bits/stdc++.h>
using namespace std;
#define N
int main()
{
int a=1,b=1,c=1,d,i=0;
while(1)
{
d=(a+b+c)%10000;
a=b;
b=c;
c=d;
i++;
if(i==20190321) //当i=20190321时,输出,并结束循环
{
cout<<d<<endl;
break;
}
}
return 0;
}
第四题:数的分解(本题总分:10 分)
【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包
含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和
1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
本题参考:点这里哟
#include<bits/stdc++.h>
using namespace std;
bool check(int n) //判断是否有2或4
{
while(n)
{
if(n%10==2||n%10==4)
return false;
n/=10;
}
return true;
}
int main()
{
int n=2019,ans=0;
for(int i=1;i<n;i++)
{
for(int j=i+1;j<n-j-i;j++) //j=i+1,使得a,b,c不会相等,也不会重复出现(一下子判断了两个条件!!!)
//另一个数字为n-j-i,降低时间复杂度
{
if(check(i)&&check(j)&&check(n-j-i))
{
ans++;
}
}
}
cout<<ans;
return 0;
}