騰訊2016-9-1 軟件測試工程師 模擬考 第二部分 程序題目

總的一個小時:

第一部分:15道多選題

第二部分:1道編程題+1道問答題


編程:打印蛇形矩陣(類似於 《劍指offer 》面試題20 順時針打印矩陣)

問答:stack與heap的區別


第一部分

1 兩臺服務器距離1500km遠,ping通需要耗費多少時間? 

4ms 8ms 16ms 32ms 



2 以下哪些屬於平衡二叉樹?

紅黑樹 B+樹 完全二叉樹 。。。


3 Integer i1=127,i2=127,i3=128,i4=128;

i1==i2;

i1.equal(i2);

i3==i4;

i3.equal(i4);


判斷結果該是:true true false true

理由:

JVM會自動維護8種基本類型的常量池,int常量池中初始化-128~127的範圍,所以當爲i=127賦值時,在自動裝箱過程中是取自常量池中的數值,而當i=128時,128不在常量池範圍內,所以在自動裝箱過程中需要new128,所以地址不一樣。


第二部分 我的答案

/*
題目:蛇形矩陣
例子:

輸入 3              
對應的矩陣是:
1 2 3
8 9 4
7 6 5

按行輸出:1 2 3 8 9 4 7 6 5

*/


#include<iostream>
//#include<vector>
//#include<algorithm>
using namespace std;
int k=1;
int **nn;
void f( int n,int start)
{
	int endX=n-1-start;
	int endY=endX;

	for(int i=start;i<=endX;i++)
	{
		nn[start][i]=k++;
	}
	if(start<endY)
	{
		for(int i=start+1;i<=endY;i++)
	{
		nn[i][endX]=k++;
	}
	}

	if(start<endY&&start<endX)
	{
		for(int i=endX-1;i>=start;i--)
		{
		nn[endY][i]=k++;  //endY指的是 第幾行
		}
	}

	if(start<endY-1 && start<endX)
	{
		for(int i=endY-1;i>start;i--)
		{
		nn[i][start]=k++;  //endY指的是 第幾行
		}
	}


}

void main()
{ 
	  int n;
	  cin>>n;
	 
	  nn=new int *[n];
	  for(int i=0;i<n;i++)
		  nn[i]=new int [n];

	  if(n<=1)cout<<n<<endl;
	  else
	  {
		  int start=0;
		  while(start*2<n)
		  { 
			  f(n,start);
			  start++;
		  }
	  }
	  for(int k1=0;k1<n;k1++)
		  {for(int kk=0;kk<n;kk++)
			  cout<<nn[k1][kk]<<"\t";
	  cout<<endl;}


	system("pause");
}

1.heap是堆,stack是棧。
2.stack的空間由操作系統自動分配和釋放,heap的空間是手動申請和釋放的,heap常用new關鍵字來分配。
3.stack空間有限,heap的空間是很大的自由區。
   在Java中,若只是聲明一個對象,則先在棧內存中爲其分配地址空間,若再new一下,實例化它,則在堆內存中爲其分配地址。
4.舉例:
數據類型 變量名;這樣定義的東西在棧區。如:Object a =null; 
只在棧內存中分配空間new 數據類型();或者malloc(長度); 這樣定義的東西就在堆區。如:Object b =new Object(); 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章