程序员

7道腾讯算法编程真题,你能做对几道?包含一道趣味题

作者:admin 2021-06-28 我要评论

??????? 1、生成格雷码 ???????在一组数字的编码中若任意两个相邻的代码只有一位二进制数不同则称这种编码为格雷码(GrayCode)请编写一个函数使用递归的方法生成N...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

???????1、生成格雷码

???????在一组数字的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(GrayCode),请编写一个函数,使用递归的方法生成N位的格雷码。给定一个整数n,请返回n位的格雷码,顺序从0开始。

importjava.util.Scanner;

publicclassMain{

	publicstaticvoidmain(String[]args){
		Scannersc=newScanner(System.in);
		while(sc.hasNext()){
			intk=sc.nextInt();
			String[]gelei=studyenglish(k);
			StringBuildersb=newStringBuilder();
			for(inti=0;i<gelei.length;i++){
				if(i==0){
					sb.append("[");
				}
				sb.append('"');
				sb.append(gelei[i]);
				if(i==gelei.length-1){
					sb.append('"');
					sb.append("]");
				}else{
					sb.append('"');
					sb.append(',');
				}
			}
			System.out.println(sb.toString());
		}
		sc.close();
	}

	publicstaticString[]studyenglish(intk){
		String[]strings=newString[(int)Math.pow(2,k)];
		if(k==1){
			strings[0]="0";
			strings[1]="1";
			returnstrings;
		}else{
			String[]result=studyenglish(k-1);
			for(inti=0;i<result.length;i++){
				strings[i]="0"+result[i];
				strings[strings.length-1-i]="1"+result[i];
			}
		}
		returnstrings;
	}
}

???????2、微信红包

???????春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半,请帮小明找到该红包金额。给定一个红包的金额数组gifts及它的大小n,请返回所有红包的金额。若没有金额超过红包总数的一半,返回0。

???????测试样例:[1,2,3,2,2],5 返回:2

importjava.util.*;

publicclassGift{
publicintgetValue(int[]gifts,intn){
//writecodehere
	intans=gifts[0];
	intcount=1;
	for(inti=0;i<gifts.length;i++){
		if(gifts[i]!=ans){
		count--;
		}else
		count++;
		if(count==0){
			count=1;
			ans=gifts[i];
		}
}
		count=0;
		for(intg:gifts){
		if(g==ans)
				count++;
		else
		count--;
		}
		returncount>0?ans:0;
		}
}

???????3、编码

???????假定一种编码的编码范围是a~y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下:a,aa,aaa,aaaa,aaab,aaac,……,b,ba,baa,baaa,baab,baac……,yyyw,yyyx,yyyy其中a的index为0,aa的index为1,aaa的index为2,以此类推。编写一个函数,输入是任意一个编码,输出这个编码对应的index。

???????输入描述:输入一个待编码的字符串,字符串长度小于等于100。
???????输出描述:输出这个编码的index。

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;

publicclassMain{

publicstaticvoidmain(String[]args)throwsIOException{
	BufferedReaderreader=newBufferedReader(newInputStreamReader(System.in));
	Stringstr;
	while((str=reader.readLine())!=null){
		char[]chars=str.trim().toCharArray();
		inttemp=0,sum=0;
		for(inti=0;i<4;i++){
				temp*=25;
				if(i<chars.length){
				temp+=chars[i]-'a';
		}
		sum+=temp;
		if(i<chars.length-1){
			sum+=1;
			}
		}
		System.out.println(sum);
		}
	}
}

???????4、游戏任务标记

???????游戏里面有很多各式各样的任务,其中有一种任务玩家只能做一次,这类任务一共有1024个,任务ID范围[1,1024]。请用32个unsignedint类型来记录这1024个任务是否已经完成(初始状态都是未完成)。输入两个参数,都是任务ID,需要设置第一个ID的任务为已经完成;并检查第二个ID的任务是否已经完成。输出一个参数,如果第二个ID的任务已经完成输出1,如果未完成输出0。如果第一或第二个ID不在[1,1024]范围,则输出-1。

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;
importjava.lang.Math;
publicclassMain{
privatestaticint[]s=newint[32];
privatestaticinttestId(intset,intcheck){
//ID检查
if(set>1024||check>1024){
	return-1;
}
//index为int数组的下标(0~31)bit为int变量的第几位(0~31)例如1--s[1]=2^31
intset_index=(set-1)/32;
intset_bit=set%32;
intcheck_index=(check-1)/32;
intcheck_bit=32*(check_index+1)-check;
//设置第一个ID任务完成
s[set_index]=s[set_index]|(int)Math.pow(2,set_bit);
//检查第二个任务是否完成
if((s[check_index]&(int)Math.pow(2,check_bit))!=0){
	return1;
	}
	else{
	return0;
	}
}
publicstaticvoidmain(String[]args)throwsIOException{
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
String[]str=br.readLine().split("");
intset=Integer.parseInt(str[0]);
intcheck=Integer.parseInt(str[1]);
System.out.println(testId(set,check));
	}
}

???????5、素对数

???????给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。如输入为10,程序应该输出结果为2。(共有两对质数的和为10,分别为(5,5),(3,7))。

importjava.util.*;
importjava.io.*;

publicclassMain{
	publicstaticvoidmain(String[]args)throwsIOException{
	BufferedReaderbeader=newBufferedReader(newInputStreamReader(System.in));
	inttarget=Integer.parseInt(beader.readLine());//获取到输入的数
	int[]numbs=newint[target];
	intcount=0;
	intresult=0;
	for(inti=2;i<target;i++){
		intjudge=0;
		for(intj=2;j<i;j++){
			if(i%j==0){
			judge=1;
			break;
		}
}
	if(judge==0){
	numbs[count]=i;
	count++;
	}
}
	for(inti=0;i<count-1;i++){
		for(intj=i;j<count;j++){
			if((numbs[i]+numbs[j])==target){
				result++;
				break;
			}
		}
}
System.out.println(result);
	}
}

???????6、数字转换机

???????小Q从牛博士那里获得了一个数字转换机,这台数字转换机必须同时输入两个正数a和b,并且这台数字转换机有一个红色的按钮和一个蓝色的按钮:
???????当按下了红色按钮,两个数字同时加1。
???????当按下了蓝色按钮,两个数字同时乘2。
???????小Q现在手中有四个整数a,b,A,B,他希望将输入的两个整数a和b变成A,B(a对应A,b对应B)。因为牛博士允许小Q使用数字转换机的时间有限,所以小Q希望按动按钮的次数越少越好。请你帮帮小Q吧。

???????输入描述:输入包括一行,一行中有四个正整数a,b,A,B,(1≤a,b,A,B≤10^9)。
???????输出描述:如果小Q可以完成转换,输出最少需要按动按钮的次数,否则输出-1。

importjava.io.BufferedReader;
importjava.io.IOException;
importjava.io.InputStreamReader;

publicclassMain{
	publicstaticvoidmain(String[]args)throwsIOException{
		BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
		String[]str=br.readLine().split("");
		inta=Integer.parseInt(str[0]);
		intb=Integer.parseInt(str[1]);
		intA=Integer.parseInt(str[2]);
		intB=Integer.parseInt(str[3]);

	System.out.println(solution(a,b,A,B));

}

privatestaticintsolution(inta,intb,intA,intB){
	if(a==A&&b==B)
	return0;
	elseif(a!=A&&b==B)
	return-1;
	elseif(a==A&&b!=B)
	return-1;
	elseif(a>A||b>B)
	return-1;

if((A&1)==0&&(B&1)==0){
	intres=solution(a,b,A/2,B/2);
	if(res==-1)
	return-1;
	returnres+1;
	}
	else{
		intres=solution(a,b,A-1,B-1);
		if(res==-1)
		return-1;
		returnres+1;
		}
	}
}

???????7、趣味题

???????小Q在学习许多排序算法之后灵机一动决定自己发明一种排序算法,小Q希望能将n个不同的数排序为升序。小Q发明的排序算法在每轮允许两种操作:
???????1、将当前序列中前n-1个数排为升序
???????2、将当前序列中后n-1个数排为升序
???????小Q可以任意次使用上述两种操作,小Q现在想考考你最少需要几次上述操作可以让序列变为升序。

publicclassMain{
	publicstaticvoidmain(String[]args){
	System.out.print(2);
	}
}
;原文链接:https://blog.csdn.net/xDroid_linzhuo/article/details/115655896

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 7道腾讯算法编程真题,你能做对几道?

    7道腾讯算法编程真题,你能做对几道?

  • Linux--信号

    Linux--信号

  • 作为造航母搞核导弹的攻城狮你要掌握的

    作为造航母搞核导弹的攻城狮你要掌握的

  • 6个“吓人”的Linux命令

    6个“吓人”的Linux命令

腾讯云代理商
海外云服务器