首页 > 编程知识 正文

字节跳动2022秋招笔试,字节跳动校招笔试真题

时间:2023-05-06 13:02:51 阅读:187821 作者:909




常规解法,按部就班,只能过30%:

#include <iostream>#include <vector>#include <algorithm>#include <numeric>#include <string>#include <queue>#include <cmath>using namespace std;int main(){ int n; cin>>n; int cnt=0; while(1){ if(n==1) break; int a=sqrt(n); if(a*a==n){ n=a; cnt++; } else{ n-=1; cnt++; } } cout<<cnt<<endl; return 0;}

下面思路来自实验室某单薄的面包,特此感谢!
注意到,求下一个可以开平方的数的技巧,例如:8的下一个可以开平方的数为4,怎么得到4呢,8开根号取整为2,8-2*2=4,这很关键,加快了找到下一可以开方的数的方法,故AC代码如下:

#include <iostream>#include <math.h>using namespace std;int main(){ long long M,tag1,count=0; cin>>M; double tag; while(M>1){ tag1=sqrt(M); tag=sqrt(M); if(tag1==tag) { M=sqrt(M); count++; //cout<<M<<endl; } else { count=count+(M-tag1*tag1); M=tag1*tag1; //cout<<M<<endl; } if(M==1) break; } cout<<count<<endl; return 0;}




下面的代码感谢另外一位单薄的面包。

#include <iostream>#include <vector>#include <algorithm>#include <numeric>#include <string>#include <queue>#include <cmath>using namespace std;int main(){ int i,a[100001],b[100001],x,y; int n; cin>>n; int jug=1; //标志完全不相同的对(不是个数) for(i=0;i<n;i++){ cin>>a[i]>>b[i]; } int tag1=1,tag2=1; //标志x和y //分别判断成对元素对的第一个和第二个元素是否有相同的 //判断x for(i=0;i<n;i++){ if(jug<0){ tag1=0; break; } if(i==0){ x=a[i]; y=b[i]; } else{ if(x!=a[i]&&y!=b[i]){ x=a[i]; jug--; } } } //判断y if(tag1==1){ cout<<x<<" "<<y<<endl; return 0; } else{ jug=1; for(i=0;i<n;i++){ if(jug<0){ tag2=0; break; } if(i==0){ x=a[i]; y=b[i]; } else{ if(x!=a[i]&&y!=b[i]){ y=b[i]; jug--; } } } } if(tag2==1) cout<<x<<" "<<y<<endl; else cout<<"No"<<endl; return 0;}/*41 53 51 35 5*/ 后记

总共4道题,做得时候除了第一题之外,其余的确实没思路,虽然用一直用python刷题,但是这不是语言的锅,刷题还是太少,没有耐心仔细分析问题。后续继续加大刷题数量和质量。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。