蓝桥杯 新生编程排位赛2 解题报告

前言


整体评价

这相当于蓝桥云课 正式推出算法赛前的公测,主要面向的是大一新生。

比赛题还是以语法题为主,被戏称为"幼稚园杯",^_^。

链接:新生编程排位赛2


A. 妮妮的翻转游戏

Q: 1翻转为0, 0翻转为1,求某个状态翻转一次后是什么?

0-1切换,可以用

x = 1 - x

x = 1 ^ x,  异或操作

这两种方式蛮常见的

#include <iostream>
using namespace std;
int main()
{
  int s;
  cin >> s;
  cout << (1 - s) << endl;
  return 0;
}

B. 小蓝的决议

Q: 超过等于一半人的支持,就输出YES,否则输出NO

#include <iostream>
using namespace std;

int main()
{
  int t;
  cin >> t;
  while (t-- > 0) {
    int n, x;
    cin >> n >> x;
    cout << (x >= (n + 1) / 2 ? "YES" : "NO") << endl;
  }
  return 0;
}

C. 阿坤老师的烹饪评分系统

Q: 取自常见的评委打分场景,去掉最高分/最低分,然后求平均分

模拟题,维护一个最大值m1,一个最小值m2,然后总和s去掉m1和m2,然后取平均值

((\sum_{i=0}^{n-1} arr[i]) - (min_{i=0}^{n-1} arr[i]]) - (max_{i=0}^{n-1} arr[i]])) / (n - 2)

#include <iostream>
#include <vector>

using namespace std;
int main()
{
  int n;
  cin >> n;
  int acc = 0;
  int minV = 0x3f3f3f, maxV = 0;
  vector<int> arr(n);
  for (int i = 0; i < n; i++) {
    cin >> arr[i];
    minV = min(minV, arr[i]);
    maxV = max(maxV, arr[i]);
    acc += arr[i];
  }
  cout << (acc - minV - maxV) / (n - 2) << endl;
  return 0;
}

D. 小桥的冒险

 Q: 爬楼梯,要么向上跳Y步,要么向上只走1步,问总共X步楼梯,最少走几步?

终于来了一道贪心,泪目

尽量走Y步,剩下的走1步

X / Y + X % Y

#include <iostream>
using namespace std;

int main()
{
  int t;
  cin >> t;
  while (t-- > 0) {
    int x, y;
    cin >> x >> y;
    cout << x / y + x % y << endl;
  }
  return 0;
}

E. 阿坤老师的异域字母谜

Q: k进制的两个数a, b, 其乘积并转为10进制的数是啥?

模拟k进制相乘比较麻烦,最好还是转换为10进制,再相乘。

#include <iostream>
using namespace std;

// 定义进制转换函数
int toNumber(const string &s, int k) {
  int r = 0;
  for (int i = 0; i < s.length(); i++) {
    r = r * k + (s[i] - '0');
  }
  return r;
}

int main()
{
  int k;
  string a, b;
  cin >> k >> a >> b;

  int ai = toNumber(a, k);
  int bi = toNumber(b, k);

  cout << ai * bi << endl;

  return 0;
}


写在最后

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值