网易互娱9月7晚的笔试
网易互娱9月7晚的笔试,听说大家都AC 了 4道,我只A了3道,希望网易能给个面试机会吧。大家都A了几道啊?
第一题
#include <iostream>
#include <string>
#include <vector>
using namespace std;
vector<int> Trans(long long n)
{
vector<int> vec;
while(n>0)
{
int k=n%2;
vec.push_back(k);
n/=2;
}
while(vec.back()==0)
{
vec.pop_back();
}
return vec;
}
bool judge(vector<int> vec)
{
int n=vec.size();
if(n<1)
return false;
if(n==1)
return true;
for(int i=0;i<n/2;i++)
{
if(vec[i]!=vec[n-1-i])
return false;
}
return true;
}
int main()
{
int t;
cin>>t;
while(t--)
{
long long num;
cin>>num;
vector<int> temp=Trans(num);
if(judge(temp))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
} 第二题我是先构建二叉树,找出根节点,然后层次遍历判断,大家是这么做的?
#include <iostream>
#include <string>
#include <vector>
#include <queue>
using namespace std;
struct Node
{
int val;
Node *left,*right;
Node(int v,Node *l=NULL,Node *r=NULL):val(v),left(l),right(r){}
};
bool judge(Node *root)
{
if(root==NULL)
return false;
queue<Node *> q;
q.push(root);
int current_sum=0;
int pre_sum=0;
while(!q.empty())
{
current_sum=0;
int len=q.size();
for(int i=0;i<len;i++)
{
Node *t=q.front();
// cout<<t->val<<' ';
current_sum+=t->val;
q.pop();
if(t->left!=NULL)
q.push(t->left);
if(t->right!=NULL)
q.push(t->right);
}
if(current_sum<pre_sum)
return false;
pre_sum=current_sum;
// cout<<endl;
}
return true;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
vector<Node* > vec;
int *IN=new int[n];
for(int i=0;i<n;i++)
{
Node *temp=new Node(-1);
vec.push_back(temp);
IN[i]=0;
}
for(int i=0;i<n;i++)
{
int v,l,r;
cin>>v>>l>>r;
IN[l]=IN[r]=1;
vec[i]->val=v;
if(l!=-1)
vec[i]->left=vec[l];
if(r!=-1)
vec[i]->right=vec[r];
}
int r=0;
for(int i=0;i<n;i++)
{
if(IN[i]==0)
{
// cout<<"root:"<<i<<' ';
r=i;
break;
}
}
if(judge(vec[r]))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
第三题,自己疏忽了,写错一行代码,调半天才改对,看来写代码第一遍就得把逻辑想清楚,不然错的时候很耗时间去调试。
#include <string>
#include <vector>
#include <queue>
#include<iostream>
using namespace std;
int main()
{
int t;
cin>>t;
while(t--)
{
int k,m;
cin>>k>>m;
int day[31];
for(int i=0;i<=30;i++)
day[i]=0; //标记可 喝咖啡的日期
for(int i=0;i<m;i++)
{
int t;
cin>>t;
day[t]=1;
}
int l=1,r=1;
day[1]=1;
while(l<=30&&r<=30)
{
r=l+k+1;
bool flag=true;
for(int j=l+1;j<=30&&j<r;j++)
{
if(day[j]==1) //如果后边 K天 内 有 必须喝咖啡的日子,则当前日子不满足
{
day[l]=0;
l=j;
flag=false;
break;
}
}
if(flag&&r<=30)
{
day[r]=1;
l=r;
}
}
int sum=0;
for(int i=1;i<=30;i++)
{
if(day[i]==1)
{
// cout<<i<<' ';
sum++;
}
}
// cout<<endl;
cout<<sum<<endl;
}
return 0;
}
查看10道真题和解析