2019 蓝桥杯 A组题目解析
试题A:平方和
【问题描述】
小明对数位中含有 2、0、1、9 的数字很感兴趣,在 1 到 40 中这样的数包括 1、2、9、10 至 32、39 和 40,共 28 个,他们的和是 574,平方和是 14362。注意,平方和是指将每个数分别平方后求和。
请问,在 1 到 2019 中,所有这样的数的平方和是多少?
#include<iostream>
using namespace std;
int num[4] = {
1,2,0,9};
int isIn(int value){
//拆分后的个位数
int sub;
//拆分
while (value){
//得到当前整数 尾位数
sub = value % 10;
//切割这一整形
value /= 10;
//输出
// cout << sub;
for(int k = 0;k < 4;k++){
if(sub == num[k]){
return 1;
}
}
}
return 0;
}
int check(int value){
while(value){
if(value % 1 == 0 || value % 2 == 0 || value % 9 == 0 || value % 10 == 0){
return true;
}
}
return false;
}
int main(){
//终于知道为什么要 long long
// int result = 0;
long long result = 0;
for(int i = 1;i <= 2019;i++){
if(check(i)){
result += i*i;
}
}
cout << result << endl;
}
试题B:数列求值
【问题描述】
给定数列 1, 1, 1, 3, 5, 9, 17, …,从第 4 项开始,每项都是前 3 项的和。求
第 20190324 项的最后 4 位数字。
#include <iostream>
using namespace std;
//已知项数求前c项
void fibo(int num){
int a = 1,b = 1,c;
cout << 1 << " " << 1 << " ";
for(int i = 3;i <= num;i++){
c = a + b;
b = a;
a = c;
cout << c << " ";
}
cout << endl;
// 打印出第10项
cout << c << endl;
}
void prefix_sum(long long int N){
long long int a = 1,b = 1,c = 1;
long long int d;
cout << a << " " << b << " " << c << " ";
for(int i=4;i <= N;i++)
{
d = (a+b+c) % 10000;
a = b;
b = c;
c = d;
cout << d << " ";
}
cout << endl;
//打印出第10项
cout<< d <<endl;
}
void prefix_sum2(long long int target){
long long int a = 1<