• 蓝桥杯练习


    1434.蓝桥杯历届试题-回文数字 - C语言网

    暴力枚举每种可能,五位枚举两对 + 单个,六位枚举三对

    1. #include
    2. using namespace std;
    3. int main()
    4. {
    5. int n;
    6. cin >> n;
    7. int flag = 0;
    8. for(int i = 1; i <= 9; i ++)
    9. {
    10. for(int j = 0; j <= 9; j ++)
    11. {
    12. for(int k = 0; k <= 9; k ++)
    13. {
    14. if(i * 2 + j * 2 + k == n)
    15. {
    16. cout << i << j << k << j << i << endl;
    17. flag = 1;
    18. }
    19. }
    20. }
    21. }
    22. for(int i = 1; i <= 9; i ++)
    23. {
    24. for(int j = 0; j <= 9; j ++)
    25. {
    26. for(int k = 0; k <= 9; k ++)
    27. {
    28. if(i * 2 + j * 2 + 2 * k == n)
    29. {
    30. cout << i << j << k << k << j << i << endl;
    31. flag = 1;
    32. }
    33. }
    34. }
    35. }
    36. if(!flag)
    37. cout << "-1";
    38. }

    1441.蓝桥杯2013年第四届真题-幸运数 - C语言网

    模拟

    1. #include
    2. using namespace std;
    3. const int N = 1e6 + 10;
    4. int a[N];
    5. int main()
    6. {
    7. int m,n,M = 500000;
    8. int count = 0;
    9. scanf("%d%d",&m,&n);
    10. for(int i = 0;i <= 500000; i ++)
    11. a[i] = i * 2 - 1;//只给奇数赋值
    12. int op = 3;
    13. int k; //记录已经不需要更改的位置
    14. int flag = 2;//表示的是当前的下标
    15. while(op <= n)//op为当前的被除数
    16. {
    17. flag ++;
    18. k = 2;
    19. for(int j = 2;j <= M;j++)
    20. { //循环整个数组
    21. if(j % op != 0)
    22. {
    23. a[k ++] = a[j];//刷新数组
    24. }
    25. }
    26. M = k;
    27. op = a[flag];
    28. }
    29. for(int i=2;i<=k;i++)
    30. {
    31. if(a[i] > m && a[i] < n)
    32. {
    33. count++;
    34. }
    35. if(a[i] >= n)
    36. break;
    37. }
    38. printf("%d",count);
    39. }

    1445.蓝桥杯历届试题-最大子阵 - C语言网

    Acwing上有一篇题解是用枚举边界来做的,简洁明了

    而且y总也有讲解

    AcWing 126. 最大的和 - AcWing

    只有范围和输入不一样

    1. #include
    2. #include
    3. using namespace std;
    4. const int N = 510;
    5. int g[N][N] ;
    6. int main()
    7. {
    8. int n,m;
    9. cin >> n >> m;
    10. for(int i = 1 ;i <= n; i ++)
    11. for(int j = 1 ;j <= m ; j ++)
    12. {
    13. cin >> g[i][j];
    14. //同一列的前缀和
    15. g[i][j] += g[i-1][j];
    16. }
    17. int res = -0x3f3f3f;
    18. //枚举上下边界
    19. for(int i = 1; i <= n; i ++)
    20. for(int j = i; j <= n ;j ++)
    21. {
    22. //枚举右边界
    23. int last = 0;
    24. for(int k = 1; k <= m; k ++)
    25. {
    26. last = max(last, 0) + g[j][k] - g[i - 1][k];
    27. res = max(res, last);
    28. }
    29. }
    30. cout << res;
    31. return 0;
    32. }

    1462.蓝桥杯2013年第四届真题-格子刷油漆 - C语言网

    dp

     

    1. #include
    2. using namespace std;
    3. typedef long long ll;
    4. const ll mod = 1000000007;
    5. int n;
    6. ll a[1000];//表示从起点出发遍历全部格子的方案数
    7. ll b[1000];//表示从起点出发遍历全部格子且终点与起点同列
    8. ll sum;
    9. int main()
    10. {
    11. cin >> n;
    12. a[1] = 1;
    13. b[1] = 1;
    14. a[2] = 6;
    15. b[2] = 2;
    16. for (int i = 3; i <= n; i++)
    17. {
    18. b[i] = 2 * b[i - 1] % mod;
    19. a[i] = ((2 * b[i - 1]) % mod + (4 * a[i - 2]) % mod + (2 * a[i - 1]) % mod) % mod;
    20. }
    21. for (int i = 2; i < n; i++)
    22. {
    23. sum += ((4 * b[n - i + 1] % mod * a[i - 1] % mod) % mod + (4 * b[i] % mod * a[n - i] % mod) % mod) % mod;
    24. }
    25. sum = (sum + ((a[n] * 4) % mod)) % mod;
    26. cout << sum;
    27. return 0;
    28. }

    1459.蓝桥杯2013年第四届真题-高僧斗法 - C语言网

    将原问题转化为台阶Nim游戏,判断是否必胜,如果必胜,找到必胜点(依次枚举每个位置,枚举移动位置)

    1. #include
    2. using namespace std;
    3. const int N = 110;
    4. int main()
    5. {
    6. int a[N],b[N];
    7. int cnt = 0;//小和尚个数
    8. int sum = 0;
    9. while(cin >> a[cnt])
    10. cnt ++;
    11. for(int i = 1; i < cnt; i ++)//转化成Nim游戏
    12. b[i - 1] = a[i] - a[i-1] - 1;
    13. for(int i = 0; i < cnt - 1; i += 2)//必胜判断
    14. sum ^= b[i];
    15. if(sum == 0)//必败
    16. cout << -1 << endl;
    17. else
    18. {
    19. for(int i = 0; i < cnt - 1; i ++)//枚举移动第i堆
    20. for(int j = 1; a[i] + j < a[i + 1]; j ++)//枚举可以移动的个数
    21. {
    22. b[i] -= j;//拿走 j个
    23. if(i != 0)
    24. b[i - 1] += j;//它的后一堆b[i]取走了j个,前一堆 b[i-1] 要增加j个
    25. sum = 0;
    26. for(int k = 0; k < cnt - 1; k += 2)
    27. sum ^= b[k];
    28. if(sum==0)
    29. {
    30. cout << a[i] << " " << a[i] + j << endl;
    31. break;
    32. }
    33. b[i] += j;
    34. if(i != 0)
    35. b[i - 1] -= j;
    36. }
    37. }
    38. return 0;
    39. }

     1426.蓝桥杯历届试题-九宫重排 - C语言网

    Acwing上八数码同一类型,用BFS即可

    1. #include
    2. #include
    3. #include
    4. #include
    5. using namespace std;
    6. int bfs(string state)
    7. {
    8. queue q;
    9. unordered_mapint> d;
    10. q.push(state);
    11. d[state]=0;
    12. int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
    13. string end;
    14. cin >> end;
    15. while(q.size())
    16. {
    17. auto t = q.front();
    18. q.pop();
    19. if(t == end)
    20. return d[t];
    21. int distance=d[t];
    22. int k=t.find('.');
    23. int x=k/3,y=k%3;
    24. for(int i=0;i<4;i++)
    25. {
    26. int a=x+dx[i],b=y+dy[i];
    27. if(a>=0&&a<3&&b>=0&&b<3)
    28. {
    29. swap(t[a*3+b],t[k]);
    30. if(!d.count(t))
    31. {
    32. d[t]=distance+1;
    33. q.push(t);
    34. }
    35. swap(t[a*3+b],t[k]);
    36. }
    37. }
    38. }
    39. return -1;
    40. }
    41. int main()
    42. {
    43. string state;
    44. cin >> state;
    45. cout<<bfs(state)<
    46. }

  • 相关阅读:
    【校招VIP】产品经理行测之数列题
    webpack学习
    数据监测全过程——采集、清洗、分析
    Echarts:简单词云图实现
    pwnable.kr--pwn游戏之fd
    【广州华锐互动】VR虚拟党建云展馆:带你沉浸式领略红色文化
    记录--vue3中的ref,toRef,toRefs
    嘉为蓝鲸携手广州卷烟厂斩获信通院鼎新杯两大奖项
    Java利用RedisTemplate给redis存储map集合数据
    Vatee万腾未来科技之航:Vatee创新引领的新纪元
  • 原文地址:https://blog.csdn.net/w75779/article/details/127712090