腾讯实习生笔试(腾讯毕业生招聘笔试)
今天跟大家分享一下腾讯实习生笔试(腾讯毕业生招聘笔试),以下是这个问题的总结,希望对你有帮助,让我们看一看。
1. 翻转数列
解题思路:
贪心算法,每个人每次都是抽当前数字最大的纸牌,因此只需要将数组进行排序,然后模拟两个人依次抽纸牌,将第二个人抽的纸牌数字乘上-1,进行累加即可得到结果。
AC代码:
#include
#include
using namespace std;
bool compare1(int a, int b){return a > b;}
int main(){
int n;
scanf(“%d”, &n);
int card[n];
for(int i = 0; i < n; i ){
scanf(“%d”, &card[i]);
}
sort(card, card n, compare1);
int flag = -1, sum = 0;
for(int i = 0; i < n; i ){
flag *= -1;
sum = card[i] * flag;
}
printf(“%dn”, sum);
return 0;
}
3.贪吃的小Q
解题思路:
二分查找,需要注意的是,第二天吃的巧克力数量不少于第一天的一半,需要进行处理,否则前一天吃的巧克力是奇数的情况下会出现问题,比如前一天吃了19块巧克力,那么第二天至少吃10块巧克力,而不是19/2=9块巧克力。在程序中用了对2取余是否等于0来处理这种情况。
AC代码:
#include
int sum(int mid, int n){
int sum = 0;
for(int i = 0; i < n ; i ){
sum = mid;
mid = mid % 2 == 0? mid / 2: mid / 2 1;
}
return sum;
}
int find(int n, int m){
int l = 1, h = m;
while(l <= h){
int mid = (l h) / 2;
if(sum(mid, n) == m) return mid;
else if(sum(mid, n) > m) h = mid – 1;
else l = mid 1;
}
return h;
}
int main(){
int n, m;
scanf(“%d %d”, &n, &m);
int ans = find(n, m);
printf(“%dn”, ans);
return 0;
}
4.小Q的歌单
解题思路:
组合问题
AC代码:
include
long long c[105][105];
int mod = 1000000007;
void init(){
c[0][0] = 1;
for(int i = 1; i <= 100; i ){
c[i][0] = 1;
for(int j = 1; j <= 100; j ){
c[i][j] = (c[i-1][j-1] c[i-1][j]) % mod;
}
}
}
int main(){
int k;
scanf(“%d”, &k);
int a, x, b, y;
scanf(“%d %d %d %d”, &a, &x, &b, &y);
long long ans = 0;
init();
for(int i = 0; i <= x; i ){
if(i*a <= k && (k-i*a)%b == 0 && (k-i*a)/b <= y){
ans = (ans (c[x][i] * c[y][(k – i * a) / b]) % mod) % mod;
}
}
printf(“%lldn”, ans);
return 0;
}
5.安排机器
解题思路:
遍历每次遇到Y或者B,把对应斜线上的所有颜色改成X,次数加一;遇到G时,分别朝斜率为 1和-1方向将斜线上的Y或者B改为X,次数加二。
AC代码:
#include
using namespace std;
int r, c;
char color[55][55];
void changeB(int p, int q){
while(p != r && q != -1){
if(color[p][q] == ‘B’) color[p][q] = ‘X’;
else if(color[p][q] == ‘G’) color[p][q] = ‘Y’;
else break;
p ; q–;
}
}
void changeY(int p, int q){
while(p != r && q != c){
if(color[p][q] == ‘Y’) color[p][q] = ‘X’;
else if(color[p][q] == ‘G’) color[p][q] = ‘B’;
else break;
p ; q ;
}
}
int main() {
cin >> r >> c;
for(int i = 0; i < r; i ) {
for(int j = 0; j < c; j )
cin >> color[i][j];
}
int count = 0;
for(int i = 0; i < r; i ) {
for(int j = 0; j < c; j ){
if(color[i][j] == ‘Y’){
int p = i 1, q = j 1;
color[i][j] = ‘X’;
changeY(p, q);
count ;
}else if(color[i][j] == ‘B’) {
int p = i 1, q = j – 1;
color[i][j] = ‘X’;
changeB(p, q);
count ;
}else if(color[i][j] == ‘G’){
color[i][j] = ‘X’;
changeY(i 1, j 1);
changeB(i 1, j-1);
count = 2;
}
}
}
cout << count << endl;
return 0;
}
以上就是这些,制作不易,如有需求,请关注点赞支持下,谢谢!
如发现本站有涉嫌抄袭侵权/违法违规等内容,请<举报!一经查实,本站将立刻删除。