以下字节笔试编程题代码及思路由@nuoyanli提供,有兴趣的可以去这位ACM专业打铁选手那里找到更多刷题技巧。
文章目录
- 第一道:第一题自然数a、b(100%)
- 题目描述
- 思路
- 参考代码:
- 第二道:小明玩游戏(100%)
- 题目描述
- 思路
- 参考代码:
- 第三道: 五子棋(100%)
- 题目描述
- 思路
- 参考代码
- 第四道:扑克牌(100%)
- 题目描述
- 思路
- 参考代码
第一道:第一题自然数a、b(100%)
题目描述
给定两个自然数a和b,要求对这两个数字做N次操作后,是两个数字的值最终相等。在第i次操作中,选择a或者b对其加i。请计算使a和b相等的最小操作次数。
例如,给定数字a=27和b=20,最少可以进行5步操作后使其相等:
第1步,令b=b+1,此时a为27,b为21
第2步,令b=b+2此时a为27b为23
第3步,令b=b+3,此时a为27,b为26
第4步,令a=a+4,此时a为31,b为26
第5步,令b=b+5,此时a为31b为31
输入描述:
输入包括t+1行
第一行是一个正数t(1 a >> b;
LL k = abs(a - b);
LL l = -1, r = 1e5;
while(l + 1 > 1;
if(mid*(mid+1)/2 b;
int cha = abs(b - a);
int now = sqrt(cha * 2);
while (true) {
if (now * (now + 1) / 2 >= cha && (now * (now + 1) / 2 - cha) % 2 == 0)
break;
now++;
}
cout > c;
pre[i].a = pre[i - 1].a + a;
pre[i].b = pre[i - 1].b + b;
pre[i].c = pre[i - 1].c + c;
}
for (int i = 1; i > a >> b >> c;
int l = 1, r = n, ans = -1;
while (l = a && pre[mid].b >= b && pre[mid].c >= c) {
ans = mid;
r = mid - 1;
} else
l = mid + 1;
}
cout
