腾讯实习生笔试(腾讯毕业生招聘笔试)

今天跟大家分享一下腾讯实习生笔试(腾讯毕业生招聘笔试),以下是这个问题的总结,希望对你有帮助,让我们看一看。

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;

}

以上就是这些,制作不易,如有需求,请关注点赞支持下,谢谢!

本站部分内容由互联网用户自发贡献,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规等内容,请举报!一经查实,本站将立刻删除。
本站部分内容由互联网用户自发贡献,该文观点仅代表作者本人,本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

如发现本站有涉嫌抄袭侵权/违法违规等内容,请<举报!一经查实,本站将立刻删除。