当前位置:   article > 正文

【蓝桥杯】第十五届蓝桥杯模拟赛(第二期)_十五届蓝桥杯eda赛模拟试题二

十五届蓝桥杯eda赛模拟试题二

第一题 计算 答案:108

std::cout<<36*30/10;

第二题 快速幂 答案:608

  1. #include<bits/stdc++.h>
  2. const int mod=1e3;
  3. #define int long long
  4. int qmi(int a,int b)
  5. {
  6. int res=1;
  7. while(b)
  8. {
  9. if(b&1) res=(res*a)%mod;
  10. b>>=1;
  11. a=a*a%mod;
  12. }
  13. return res%mod;
  14. }
  15. signed main()
  16. {
  17. std::cout<<qmi(2,2023);
  18. return 0;
  19. }

这题python一行输出语句就好了,但是c里面会溢出。 

没学过快速幂就循环2023次就好了。

第三题 进制转换 答案:4169

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. int cnt;
  4. int trans(int a,int x)//转成x进制
  5. {
  6. int sum=0;
  7. while(a/x)
  8. {
  9. sum+=a%x;
  10. a=a/x;
  11. }
  12. sum+=a;
  13. return sum;
  14. }
  15. signed main()
  16. {
  17. for(int i=1;i<=10000000;i++)
  18. {
  19. if(trans(i,2)==trans(i,8))
  20. {
  21. cnt++;
  22. std::cout<<i<<'\n';
  23. }
  24. if(cnt==23)
  25. {
  26. break;
  27. }
  28. }
  29. return 0;
  30. }

 

第四题 约数个数 答案:901440

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. int a[]={393353,901440,123481,850930,423154,240461,
  4. 373746 ,232926, 396677, 486579 ,744860, 468782,941389,
  5. 777714, 992588, 343292, 385198 ,876426,483857, 241899,
  6. 544851, 647930, 772403, 109929,882745, 372491, 877710,
  7. 340000, 659788, 658675,296521, 491295, 609764, 718967,
  8. 842000, 670302};
  9. signed main()
  10. {
  11. int maxn=-1;
  12. int ans=0;
  13. for(auto x:a)
  14. {
  15. int cnt=2;
  16. for(int i=2;i<x;i++)
  17. {
  18. if(x%i==0) cnt++;
  19. }
  20. if(cnt>maxn)
  21. {
  22. maxn=cnt;
  23. ans=x;
  24. }
  25. }
  26. std::cout<<ans;
  27. return 0;
  28. }

 

第五题 BFS 答案:541

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. const int N=50;
  4. char g[N][N]={"0000100010000001101010101001001100000011",
  5. "0101111001111101110111100000101010011111",
  6. "1000010000011101010110000000001011010100",
  7. "0110101010110000000101100100000101001001",
  8. "0000011010100000111111001101100010101001",
  9. "0110000110000000110100000000010010100011",
  10. "0100110010000110000000100010000101110000",
  11. "0010011010100110001111001101100110100010",
  12. "1111000111101000001110010001001011101101",
  13. "0011110100011000000001101001101110100001",
  14. "0000000101011000010011111001010011011100",
  15. "0000100000011001000100101000111011101100",
  16. "0010110000001000001010100011000010100011",
  17. "0110110000100011011010011010001101011011",
  18. "0000100100000001010000101100000000000010",
  19. "0011001000001000000010011001100101000110",
  20. "1110101000011000000100011001001100111010",
  21. "0000100100111000001101001000001010010001",
  22. "0100010010000110100001100000110111110101",
  23. "1000001001100010011001111101011001110001",
  24. "0000000010100101000000111100110010101101",
  25. "0010110101001100000100000010000010110011",
  26. "0000011101001001000111011000100111010100",
  27. "0010001100100000011000101011000000010101",
  28. "1001111010010110011010101110000000101110",
  29. "0110011101000010100001000101001001100010",
  30. "1101000000010010011001000100110010000101",
  31. "1001100010100010000100000101111111111100",
  32. "1001011010101100001000000011000110110000",
  33. "0011000100011000010111101000101110110001"};
  34. int dx[]={0,1,0,-1};
  35. int dy[]={1,0,-1,0};
  36. int cnt;
  37. typedef std::pair<int,int> PII;
  38. #define fir first
  39. #define sec second
  40. void bfs(int x,int y)
  41. {
  42. std::queue<PII> q;
  43. q.push({x,y});
  44. while(!q.empty())
  45. {
  46. auto t=q.front();
  47. q.pop();
  48. g[t.fir][t.sec]='2';
  49. cnt++;
  50. for(int i=0;i<4;i++)
  51. {
  52. int a=t.fir+dx[i],b=t.sec+dy[i];
  53. if(a<0||b<0||a>29||b>39) continue;
  54. if(g[a][b]!='0') continue;
  55. g[a][b]='2';
  56. q.push({a,b});
  57. }
  58. }
  59. return ;
  60. }
  61. signed main()
  62. {
  63. bfs(0,0);
  64. std::cout<<cnt;
  65. return 0;
  66. }

第六题 模拟

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. const int N=50;
  4. signed main()
  5. {
  6. int n;
  7. std::cin>>n;
  8. std::string s=std::to_string(n);
  9. s=s+s;
  10. for(int i=1;i<7;i++)
  11. std::cout<<s[i];
  12. return 0;
  13. }

第七题 模拟

  1. #include<bits/stdc++.h>
  2. #define LL long long
  3. const int N=50;
  4. std::map<char,int> mp;
  5. signed main()
  6. {
  7. std::string s;
  8. std::cin>>s;
  9. mp['a']=mp['e']=mp['i']=mp['o']=mp['u']=1;
  10. char ans;
  11. for(int i=0;i<s.length();i++)
  12. if(mp[s[i]]) ans=s[i];
  13. std::cout<<ans;
  14. return 0;
  15. }

第八题 模拟

问题描述

  给定一个整数,对这个整数的一次转换是指将这个整数变为这个整数的所有数位上的非零数字的乘积。
  例如,对 123456789 进行一次转换变为 1*2*3*4*5*6*7*8*9=362880,再进行一次转换变为 3*6*2*8*8=2304,再进行一次转换变为 2*3*4=24,再进行一次转换变为 8。
  给定一个整数,请依次将转换过程中经历的每个整数输出,直到小于 10 。

输入格式

  输入一行包含一个整数 n 。

输出格式

  输出多行,每行包含一个整数。

样例输入

123456789

样例输出

362880
2304
24
8

评测用例规模与约定

  对于 50% 的评测用例,1 <= n <= 10**9 (10的9次方)。
  对于所有评测用例,1 <= n <= 10**18 (10的18次方)。

我想复杂了,甚至不需要高精度,1e18 longlong就够了。 

  1. #include <bits/stdc++.h>
  2. #define int long long
  3. const int N = 2e6 + 10;
  4. int calc(std::string s)
  5. {
  6. int x=1;
  7. for(int i=0;i<s.size();i++)
  8. if(s[i]!='0') x*=(s[i]-'0');
  9. return x;
  10. }
  11. signed main()
  12. {
  13. int a;
  14. std::cin>>a;
  15. while(a>10)
  16. {
  17. std::string s=std::to_string(a);
  18. a=calc(s);
  19. std::cout<<a<<'\n';
  20. }
  21. }

第九题 BFS

问题描述

  小蓝站在一个 n 行 m 列的方格图中间,方格图的每一个方格上都标有一个正整数。
  如果两个相邻方格(上下左右四个方向相邻)内的数的最大公约数大于 1 ,则可以从其中一个方格移动到另一个方格,当然也可以从另一个方格移回第一个方格。
  假设小蓝开始时站在第 r 行第 c 列,请问小蓝可以移动到方格图内的多少个方格?

输入格式

  输入的第一行包含两个整数 n, m ,用一个空格分隔,表示方格图的行数和列数。
  接下来 n 行,每行包含 m 个正整数,相邻整数间用一个空格分隔,依次表示方格图中从第 1 行到第 n 行,每行从第 1 列到第 m 列中的数。
  接下来一行包含两个整数 r, c,用一个空格分隔,表示小蓝所在的行号和列号。

输出格式

  输出一行包含一个整数,表示答案。

样例输入

3 4
3 6 5 5
2 4 3 5
7 8 3 8
3 2

样例输出

5

评测用例规模与约定

  对于50%的评测用例,1 <= n, m <= 100,方格图中的每个数不超过 10**5 (10的5次方)。
  对于所有评测用例,1 <= n, m <= 1000,方格图中的每个数不超过 10**9 (10的9次方)。

  1. #include<bits/stdc++.h>
  2. const int N=1e3+10;
  3. typedef std::pair<int,int> PII;
  4. #define fir first
  5. #define sec second
  6. int n,m;
  7. int g[N][N];
  8. int cnt;
  9. bool st[N][N];
  10. int dx[]={0,1,0,-1};
  11. int dy[]={1,0,-1,0};
  12. void bfs(int x,int y)
  13. {
  14. std::queue<PII> q;
  15. q.push({x,y});
  16. st[x][y]=true;
  17. cnt++;
  18. while(!q.empty())
  19. {
  20. auto t=q.front();
  21. q.pop();
  22. st[t.fir][t.sec]=true;
  23. for(int i=0;i<4;i++)
  24. {
  25. int a=dx[i]+t.fir;
  26. int b=dy[i]+t.sec;
  27. if(st[a][b]) continue;
  28. if(a<1||b<1||a>n||b>m) continue;
  29. if(std::__gcd(g[a][b],g[t.fir][t.sec])<=1) continue;
  30. st[a][b]=true;
  31. cnt++;
  32. q.push({a,b});
  33. }
  34. }
  35. }
  36. signed main()
  37. {
  38. std::cin>>n>>m;
  39. for(int i=1;i<=n;i++)
  40. {
  41. for(int j=1;j<=m;j++) std::cin>>g[i][j];
  42. }
  43. int r,c;
  44. std::cin>>r>>c;
  45. bfs(r,c);
  46. std::cout<<cnt;
  47. return 0;
  48. }

第十题 滑动窗口

问题描述

  给定一个序列 a[1], a[2], …, a[n] 和一个整数 k,请找出一个长度正好为 k 的区间,使得区间中所有数的和最大。
  即要找到一个整数 p ,使得 1 <= p 且 p+k-1 <= n ,使得 a[p]+a[p+1]+...+a[p+k-1] 最大。

输入格式

  输入的第一行包含两个整数 n , k。
  第二行包含 n 个整数,相邻的整数之间使用一个空格分隔,表示给定的序列。

输出格式

  输出一行包含一个整数,表示最大的区间和,你只需要输出和就行,不需要输出方案。

样例输入

6 3
2 3 9 1 9 5

样例输出

19

评测用例规模与约定

  对于 30% 的评测用例,1 <= k <= n <= 30,1 <= a[i] <= 100。
  对于 60% 的评测用例,1 <= k <= n <= 1000,1 <= a[i] <= 10000。
  对于所有评测用例,1 <= k <= n <= 100000,1 <= a[i] <= 1000000。

 要记得开long long

  1. #include<bits/stdc++.h>
  2. const int N=100000+10;
  3. typedef long long ll;
  4. int n,k;
  5. int a[N];
  6. signed main()
  7. {
  8. std::cin>>n>>k;
  9. for(int i=1;i<=n;i++) std::cin>>a[i];
  10. ll maxn=-1e9;
  11. ll sum=0;
  12. for(int i=1;i<=n;i++)
  13. {
  14. sum+=a[i];
  15. if(i>k) sum-=a[i-k];
  16. maxn=std::max(maxn,sum);
  17. }
  18. std::cout<<maxn;
  19. return 0;
  20. }

出这期主要是因为好多人私信要,不得不说蓝桥杯的流量真大。

然后因为没有oj评测,只保证过样例,欢迎大佬指正。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/552643
推荐阅读
相关标签
  

闽ICP备14008679号