网易雷火研发笔试 四题 (代码)

第一题:
#include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<(1<<n);i++){
		int cnt=0;
		int x=i;
		bool flag=false;
		while(x>m){
			if(x==2*m+1)flag=true;
			x>>=1;cnt++;
		}
		if(x==m&&i!=m){
			if(flag)cout<<i-(1<<cnt-1)<<endl;
			else cout<<i+(1<<cnt-1)<<endl;
		}
		else cout<<i<<endl;
	}	
}

第二题:
#include<bits/stdc++.h>
using namespace std;
int n,k;
int g[1005];
int main(){
	cin>>n>>k;
	for(int i=1;i<=n;i++)cin>>g[i];
	int ans=0;
	while(1){
		sort(g+1,g+1+n);
		int cnt=0;
		for(int i=n;i>=1;i--){
			if(g[i])g[i]--,cnt++;
			if(cnt==k)break;
		}
		ans+=cnt==k;
		if(cnt!=k)break;
	}
	cout<<ans<<endl;
}

第三题:
#include<bits/stdc++.h>
using namespace std;
int n;
int dp[1005][1005];
int main(){
	cin>>n;
	auto dfs=[&](auto&& dfs,int word,int cache,bool flag)->int{
		if(word>=n)return 0;
		if(dp[word][cache])return dp[word][cache];
		int ans=n;
		ans=min(ans,dfs(dfs,word+1,cache,0)+1);
		if(cache)ans=min(ans,dfs(dfs,word+cache,cache,0)+2);
		if(word&&!flag)ans=min(ans,dfs(dfs,word,word,1)+5);
		return dp[word][cache]=ans;
	};
	cout<<dfs(dfs,0,0,0)<<endl;
}

第四题:
#include<bits/stdc++.h>
using namespace std;
int m,n;
int a[35][35];
int b[35][35];
int c[35];
char s[1000],q[1000];
bool del(){
	bool flag=false;
	for(int j=1;j<=n;j++)
	for(int i=1;i<=m-2;i++)
	if(a[i][j]&&a[i][j]==a[i+1][j]&&a[i+1][j]==a[i+2][j]){
		b[i][j]=b[i+1][j]=b[i+2][j]=0;
		flag=true;
	}
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n-2;j++)
	if(a[i][j]&&a[i][j]==a[i][j+1]&&a[i][j+1]==a[i][j+2]){
		b[i][j]=b[i][j+1]=b[i][j+2]=0;
		flag=true;
	}
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++){
		if(b[i][j]==0)a[i][j]=0;
		b[i][j]=1;
	}
	return flag;
}
void fall(){
	for(int j=1;j<=n;j++){
		int index=0;
		for(int i=m;i>=1;i--)
		if(a[i][j])c[++index]=a[i][j];
		for(int i=1;i<=index;i++)a[m-i+1][j]=c[i];
		for(int i=index+1;i<=m;i++)a[m-i+1][j]=0;
	}
}
void insertq(){
	int index=0,len=strlen(q+1);
	for(int i=m;i>=1;i--)
	for(int j=1;j<=n;j++)
	if(!a[i][j]&&index<len)
	a[i][j]=q[++index]-'0';

}
int main(){
	cin>>m>>n;
	scanf("%s%s",s+1,q+1);
	for(int i=1;i<=m;i++)
	for(int j=1;j<=n;j++)
	a[i][j]=s[n*(i-1)+j]-'0',b[i][j]=1;
	while(true){
		bool flag=true;
		while(del()){
			flag=false;
			fall();
		}
		if(flag)break;
		insertq();
	}
	for(int i=1;i<=n;i++)printf("%d",a[1][i]);puts("");
}


#笔试题目##网易雷火#
全部评论
大佬,这是ak了吗
1 回复 分享
发布于 2020-08-02 22:12
第一题看不太懂,能否简单说一下思路
点赞 回复 分享
发布于 2020-08-04 10:53
楼主有收到面试通知吗
点赞 回复 分享
发布于 2020-08-06 11:47
第三题的代码,确定能编译?
点赞 回复 分享
发布于 2020-09-13 10:55

相关推荐

ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
3 12 评论
分享
牛客网
牛客企业服务