2014福建星网锐捷校园招聘笔试—四道大题

昨天下去星网锐捷笔试,考了很多内容:有c语言的相关知识,网络IP,线性表等。后面有四道大题,共60分,分值很高吧!

顺便说一下,我报的是软件研发,当时说包括c、c++和java.可拿到试卷才知道全是c,由于对java比较熟悉,用java实现后面的四道大题。具体的c函数表示和原题已经记不清了,只能说说题目的大意。

以下代码在IDE里面可以直接运行,并输出相应结果。

1.编程实现杨辉三角的前十行(10分):

public class Test4 {
	private static void getLines(int i){		
		int[][] yh=new int[i][i];
		//给所有端点赋值为1
		for(int n=0;n<i;n++){
			yh[n][0]=1;
			yh[n][n]=1;
		}
		//给除了端点元素的其它元素赋值,把yh[n][m]看成是组合c(n,m),n、m分别为下标和上标		
		for(int n=2;n<i;n++){
			for(int m=1;m<n;m++){
				//该公式为杨辉三角的特性之一
				yh[n][m]=yh[n-1][m]+yh[n-1][m-1];
			}
		}
		//输出整个杨辉三角
		for(int k=0;k<i;k++){
			for(int l=0;l<=k;l++){
				System.out.print(yh[k][l]+" ");
			}
			System.out.println();
		}
	}
	public static void main(String[] args){
		int i=10;
		getLines(i);
	}
}
输出:


1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 
1 6 15 20 15 6 1 
1 7 21 35 35 21 7 1 
1 8 28 56 70 56 28 8 1 
1 9 36 84 126 126 84 36 9 1 

2.一元钱买一瓶啤酒,两个空瓶换一瓶啤酒.问n元钱能喝多少瓶啤酒?用递归实现。(15分)

public class Test2 {
	private static int getNumberOfBeer(int n){
		if(n==1){
			return 1;
		}else if(n>=2&&n%2==0){
			return n+getNumberOfBeer(n/2);
			//奇数元钱需要加1
		}else if(n>=2&&n%2!=0){
			return n+1+getNumberOfBeer(n/2);
		}
		return -1;
	}
	public static  void main(String[] args){
		int i4=getNumberOfBeer(4);
		int i5=getNumberOfBeer(5);
		System.out.println(i4);
		System.out.println(i5);	
	}
}

输出:

7
9

3.对一个数组进行冒泡的升序排列。(15分)

public class bubbleSort {
	private static void Sort(int[] data){
		for(int i=0;i<data.length-1;i++){
			for(int j=0;j<data.length-1-i;j++){
				if(data[j]>data[j+1]){
					int tmp=data[j];
					data[j]=data[j+1];
					data[j+1]=tmp;
				}
			}
		}
	}
	public static void main(String[] args){
		int[] a=new int[]{1,2,5,3,9,8,7,22,-1,-3};
		Sort(a);
		for(int i=0;i<a.length;i++){
			System.out.print(a[i]+" ");
		}
	}
}
输出:

-3 -1 1 2 3 5 7 8 9 22 

4.从1000000个数里面选出100个最大的数,用堆排序实现。(20分)

public class HeapSort_max {
	//Sort的参数表与题目中所给c函数的参数表一致。t是数组中获得的前t个最大数	
	private static void Sort(int[] data,int n,int t){
		n=data.length;
		for(int i=0;i<t;i++){
			buildMaxHeap(data,n-1-i);
			swap(data,0,n-1-i);
		}
	}	
	//对两数进行交换
	private static void swap(int[] data,int i,int j){
		int tmp=data[i];
		data[i]=data[j];
		data[j]=tmp;
	}	
	//建堆的实现
	private static void buildMaxHeap(int[] data,int lastIndex){
		for(int i=(lastIndex-1)/2;i>=0;i--){
			int k=i;
			while(2*k+1<=lastIndex){
				int biggerIndex=2*k+1;
				if(biggerIndex<lastIndex){
					if(data[biggerIndex]<data[biggerIndex+1]){
						biggerIndex++;
					}
				}				
				if(data[k]<data[biggerIndex]){
					swap(data,k,biggerIndex);
					k=biggerIndex;
				}else{
					break;
				}
			}
		}
	}	
	public static void main(String[] args){
		int[] a=new int[]{1,5,8,7,-3,50,-8,0,11,21,23,18,80,30};
		int n=a.length;
		int j=6;//当数组有1000000个数,且j=100时即可输出前100个最大数
		Sort(a,n,j);
		for(int i=n-1;i>n-1-j;i--){
			System.out.print(a[i]+" ");
		}
	}
}

输出:

80 50 30 23 21 18 

看了以上题,是不是很简单啊?当参加了很多公司的笔试,从试题的难易层度,你就知道各个公司之间的层次了。Good luck!

猜你喜欢

转载自blog.csdn.net/zhk7894613/article/details/12868045