字节跳动2019春招第一批笔试

#第一题

题目大意

有1024元钱 输入你花掉的数目问找回的硬币数最小

有64 16 4 1 的硬币

水题 代码没存 Pycharm可以恢复真是太强了

整数除硬币面额 再求和


  
  
  1. n=input()
  2. n=int(n)
  3. n= 1024-n
  4. ans= 0
  5. ans+=n// 64
  6. n-= 64*(n// 64)
  7. ans+=n// 16
  8. n-= 16*(n// 16)
  9. ans+=n// 4
  10. ans+=(n -4*(n// 4))
  11. print(ans)

#第二题

题目大意

在字符串中有连续的三个字母要去掉一个

有连续的AABB型的  要去掉第二对中的一个字母 即AAB

匹配顺序是从左到右例如AABBCC 结果为AABCC

保存在电脑上的代码好像是AC的那一版


  
  
  1. n=input()
  2. n=int(n)
  3. for _ in range( 0,n):
  4. line=input()
  5. line=list(line)
  6. i= 0
  7. while i<len(line) -2:
  8. if(i<len(line) -2):
  9. if(line[i]==line[i+ 1]==line[i+ 2]):
  10. del(line[i+ 2])
  11. i-= 1
  12. if(i<len(line) -3):
  13. if(line[i]==line[i+ 1] and line[i+ 2]==line[i+ 3]):
  14. del(line[i+ 3])
  15. i-= 1
  16. i+= 1
  17. print( ''.join(line))

 

扫描二维码关注公众号,回复: 11112217 查看本文章

#第三题

题目大意

有n个人 围成一圈每个人都有自己的分数

规定

1.当前人的分数如果大于左右人的分数

那么也要比左右人获得更多的礼物

2.每人至少有一个礼物

求礼物数最小

有一组样例

2

5

1 2 3 4 5

5

5 4 3 2 1

结果都是15

错误解法:(待填坑)  已填


  
  
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <math.h>
  4. #include<algorithm>
  5. #include<cstring>
  6. using namespace std;
  7. int xx[ 100005];
  8. int cc[ 100005];
  9. int main()
  10. {
  11. int t;
  12. cin>>t;
  13. while(t--)
  14. {
  15. int n;
  16. cin>>n;
  17. int minn= 10000000;
  18. int mini;
  19. int cnt= 0;
  20. for( int i= 0; i<n; i++)
  21. {
  22. scanf( "%d",&xx[i]);
  23. if(xx[i]<minn)
  24. {
  25. minn=xx[i];
  26. mini=i;
  27. }
  28. }
  29. if(n== 1)
  30. cout<< 1<< endl;
  31. else if(n== 2)
  32. {
  33. if(xx[ 0]!=xx[ 1])
  34. cout<< 3<< endl;
  35. else
  36. cout<< 2<< endl;
  37. }
  38. else
  39. {
  40. memset(cc, 0, sizeof(cc));
  41. long long ans1= 0;
  42. int minii=mini;
  43. cc[mini]= 1;
  44. cnt= 1;
  45. ans1+= 1;
  46. while(cnt<=n -1) //顺时针
  47. {
  48. mini+= 1;
  49. mini%=n;
  50. if(xx[(mini -1+n)%n]<xx[mini] && xx[mini]>xx[(mini+ 1)%n] )
  51. cc[mini]=max(cc[(mini -1+n)%n],cc[(mini+ 1)%n])+ 1;
  52. else if(xx[(mini -1+n)%n]<xx[mini] )
  53. cc[mini]=cc[(mini -1+n)%n]+ 1;
  54. else if(xx[mini]>xx[(mini+ 1)%n])
  55. cc[mini]=cc[(mini+ 1)%n]+ 1;
  56. if(cc[mini]== 0)
  57. cc[mini]= 1;
  58. cnt++;
  59. // cout<<mini<<" "<<cc[mini]<<endl;
  60. ans1+=cc[mini];
  61. }
  62. memset(cc, 0, sizeof(cc));
  63. long long ans2= 0;
  64. mini=minii;
  65. cc[mini]= 1;
  66. cnt= 1;
  67. ans2+= 1;
  68. while(cnt<=n -1) //逆时针
  69. {
  70. mini-= 1;
  71. if(mini< 0)
  72. mini+=n;
  73. mini%=n;
  74. if(xx[(mini -1+n)%n]<xx[mini] && xx[mini]>xx[(mini+ 1)%n] )
  75. cc[mini]=max(cc[(mini -1+n)%n],cc[(mini+ 1)%n])+ 1;
  76. else if(xx[(mini -1+n)%n]<xx[mini] )
  77. cc[mini]=cc[(mini -1+n)%n]+ 1;
  78. else if(xx[mini]>xx[(mini+ 1)%n])
  79. cc[mini]=cc[(mini+ 1)%n]+ 1;
  80. if(cc[mini]== 0)
  81. cc[mini]= 1;
  82. cnt++;
  83. // cout<<mini<<" "<<cc[mini]<<endl;
  84. ans2+=cc[mini];
  85. }
  86. cout<<max(ans1,ans2)<< endl;
  87. }
  88. }
  89. return 0;
  90. }

#第四题

题目大意

有n根长度为Li的绳子

需要m根相同长度的绳子

问最大的相同长度是多少 二分裸题 精度一开始开了1e-5 改了1e-4过了


  
  
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <math.h>
  4. #include<algorithm>
  5. using namespace std;
  6. int c[ 100005];
  7. int main()
  8. {
  9. long long n,m;
  10. cin>>n>>m;
  11. long long sum= 0;
  12. for( int i= 0;i<n;i++)
  13. {
  14. cin>>c[i];
  15. sum+=c[i];
  16. }
  17. if(sum<m)
  18. cout<< "0.00"<< endl;
  19. else
  20. {
  21. double l,r,mid;
  22. l= 0,r= 1000000009;
  23. long long cnt= 0;
  24. while((r-l)> 1e-4)
  25. {
  26. mid=(l+r)/ 2;
  27. cnt= 0;
  28. for( int i= 0;i<n;i++)
  29. {
  30. cnt+= int(c[i]/mid);
  31. }
  32. // cout<<cnt<<endl;
  33. if(cnt<m)
  34. r=mid;
  35. else
  36. l=mid;
  37. }
  38. printf( "%.2lf\n",mid);
  39. }
  40. return 0;
  41. }
发布了753 篇原创文章 · 获赞 613 · 访问量 34万+

猜你喜欢

转载自blog.csdn.net/weixin_43336281/article/details/105732044