2019年蓝桥杯c/c++C组个人总结及部分题解
2019年蓝桥杯c/c++C组个人总结及部分题解
0x00. 先说说个人感受吧,,,
感受就是走出考场的时候挺sad的,感觉就有两道题白送了,在回去的滴滴车上太概和acm大佬(@w_qhai,@jieyao)探讨了一下,,,果然是没有拿到该的分数。总结一句就是凉了。下面说说各题的题解, 我只能记得起部分题目, 可能不全, 但题目大意是对的.
刚查了成绩,,, 省三,,, 说到底还是太菜,,,, 哎,,, 考上本科再说蓝桥杯的事吧~
0x01. 第一题
题目大意是求0-2019中数位上包含2,0,1,9的数列,对这个数列求和...(PS. 据说A组第一题是求数列的平方和)
/*
具体思路:对0-2019遍历一遍,对每个数字取他每一位的数字,进行验证,如果等于2,0,1,9中的某一个数,则把这个数加进sum里面, 遍历结束输出sum的值就是答案
//下面是代码
//感谢评论区大佬指出错误,在下还是太弱了!
*/
#include <iostream>
using namespace std;
int main(void)
{
int num=2019;
int sum=0;
int a,b,c,d;
for(int i=0;i<=num;i++){
a=i/1000;
b=i/100%10; //这里要对10取余
c=i/10%10; //这里要对10取余
d=i%10;
if(i>=0&&i<10){
if(d==2||d==0||d==1||d==9){
sum+=i;
cout<<i<<endl;
}
}
if(i>=10&&i<100){
if( c==2||c==0||c==1||c==9||
d==2||d==0||d==1||d==9){
sum+=i;
cout<<i<<endl;
}
}
if(i>=100&&i<1000){
if( b==2||b==0||b==1||b==9||
c==2||c==0||c==1||c==9||
d==2||d==0||d==1||d==9){
sum+=i;
cout<<i<<endl;
}
}
if(i>=1000&&i<10000){
if( a==2||a==0||a==1||a==9||
b==2||b==0||b==1||b==9||
c==2||c==0||c==1||c==9||
d==2||d==0||d==1||d==9){
sum+=i;
cout<<i<<endl;
}
}
}
cout<<sum<<endl;//num==40时,sum==574 num==2019时, sum==1905111
return 0;
}
0x02. 第二题
题目大意是小明有一块5*3的矩形, 每次要切成面积最大的正方形, 问最多能切成多少正方形,第一次3*3, 第二次2*2 第三次1*1 第四次1*1本就是正方形, 所以小明可以得到4个正方形, 题目要求是给你2019*324 的矩形,小明最多可以得到多少个正方形....
/*
具体思路: 递归...如果A>B则a-b sum+1 继续进入递归 如果 A<B则b-a sum+1 继续进入递归 直到 a或者b为0的时候sun+1之后退出递归~ 最后输出sum的值就是答案
下面是代码
*/
#include <iostream>
using namespace std;
int times=0;
int f(int x,int y)
{
if(x==0||y==0){
return 1;
}
x>y ? f(x-y,y): f(x,y-x);
times++;
cout<<x<<" "<<y<<endl;
}
int main(void)
{
//5*3 3*3 2*2 1*1 1*1
f(2019,324);
cout<<times<<endl;
return 0;
}
0x03. 第三题
题目大意: 字母映射 A代表1 Z代表26 AA代表27 AZ就代表52 问2019代表多少?
/*
具体思路: 26进制,用excel就能得到答案~ 答案是BYQ 如下图
这道题代码我有时间在写吧
*/
0x04. 第四题
题目大概 是1-49 中每次随机取出7个数 然后取这7个数的中位数 总共取7次 然后再取这7组数中位数的中位数 找出中位数最大的随机数据 每次随机取数据1-49不能重复使用
//这题大概意思是1-49平分成7等份,每份7个数字,
//然后对每一份数字取中位数,在将7份数字的中位数再取中位数
//让你求最大的中位数可能是多少
//这道题我考试时没看懂题目,,,,以为是全排列的题目,结果排了80+分钟,没出答案,,,,
//今天一分析,好简单啊,,,但是代码我还是不知道咋写
//下面是思路
/*
如下图,我们要找的是D4这个单元格的数字,并且要使这个数字尽可能地大
那么可以看到如图中红色的数字是肯定比D4大的 红色数字一共有15个
所以49-15===34 答案是34
*/
0x05. 第五题
题目大意: 自然数中前5个素数是 2 3 5 7 11 那么第2019个素数是多少哇
//这道题和1一样简单,,,
//我比赛时鬼迷心窍的填了2019...哇槽....我的小心脏啊
//下面代码
#include <iostream>
#include <math.h>
using namespace std;
int main(void)
{
//第2019个素数
int times=0;
int i,j;
int k;
for(i=2;times<2019;i++){
k=sqrt(i);
for(j=2;j<=k;j++){
if(i%j==0)
break;
}
if(j>=k+1){
times++;
cout<<i<<" "<<times<<endl;//答案17569
}
}
return 0;
}
0x06. 第六题
题目大意: 题目我不记得怎么描述了, 只记得这道题应该是二维数组顺时针旋转90°
//这道题嘛, 吧行变成列, 把列变成行逆序输出就好~
//注意这道题输出是请注意末尾的空格,,,不然容易出现PE(Presentation Error)
//下面代码
#include <stdio.h>
#include <iostream>
int main(int argc, char *argv[])
{
int number[1000][1000];
int times,row,line;
scanf("%d %d",&row,&line);
for(int i=0; i<row; i++)
for(int j=0; j<line; j++)
scanf("%d",&number[i][j]);
for(int i=0; i<line; i++){
for(int j=row-1; j>=0; j--){
if(j==row-1)
printf("%d",number[j][i]);
else
printf(" %d",number[j][i]);
}
printf("\n");
}
return 0;
}
0x07. 第七题 做这道题是真饿啊
题目记不清了,,,, 原谅我老年痴呆...
0x0. 第八题
题目大意: 给一个不超过100000长度的字符串 给定整数K,,,问Alice这个子串在K个字符长度内有没有遇到Bob,,, 反之亦可
//先上课去啦 明天写,,,,