A:组队
简单题,答案是490
B:年号字串
这道题主要是采用string类的字符串连接将二十六个字母存到数组中,下标从0开始。
char ss[26] = {
'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'};
一个数模26的结果为数组下标,下标对应的就是的字母,一个数循环模26再将对应的字母拼接起来就是结果,但是如果模26为0代表是这一位为Z那么就要将这个数减1再模,比如AA ~ AZ是27 ~ 52,52 % 26 = 0对应Z,52 / 26 % 26 = 2对应的是B而不是A,所以就要将52减一再除,就得到1,对应的就是A,而如果模26不为0则不变。
AC代码
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char ss[26] = {
'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y'};
string s = "";
int main()
{
int n;
cin >> n;
while(n != 0)
{
int x = n % 26;
s = ss[x] + s;
if(x == 0)
{
n--;
}
n /= 26;
}
cout << s;
return 0;
}
答案是:BYQ
C:数列求值
这道题采用递推的方式,用abc存放前三项的值,d存放前三项的和,由于取最后4位数,所以每次运算模10000即可
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int n;
cin >> n;
ll a = 1,b = 1,c = 1,d;
for(int i = 4 ; i <= n ; i++)
{
d = (a + b + c) % 10000;
a = b;
b = c;
c = d;
}
if(n <= 3)//避免输入的数小于4
{
cout << "1" << endl;
}
else
{
cout << d << endl;
}
return 0;
}
答案是:4695
D:数的分解
直接用暴力,i从1到2019,j从i+1到2019,k等于2019 - i - j,最后每次判断一下里面是否含有2或者4即可
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <stdlib.h>
using namespace std;
const int N = 1e5 + 5;
char str1[N],str2[N