昨天参加了华为南研所校招的机试,一共三道题,第一题很简单,输入一个字符串格式的日期,年-月,输出该月有多少天,主要注意闰年((%4==0&&%100!=0)||%400==0)2月的不同;第二题是判断字符串的括号组成正确与否,用栈解决;第三题限定时间,没有做出来,今天问了同学,记录一下:
/*输入n行m列矩阵,矩阵的每个位置只能是0或1,求最大的正方子矩阵边长,要求子矩阵内皆为1。如输入:
3 3
1 1 1
1 1 1
0 1 1
输出:2*/思路主要是在正方矩阵右下角记录大小
1 #include<iostream> 2 using namespace std; 3 4 int main() 5 { 6 int n,m; 7 cin>>n>>m; 8 int **array=new int*[n]; 9 for(int i=0;i<n;i++){ 10 array[i]=new int[m]; 11 for(int j=0;j<m;j++){ 12 cin>>array[i][j]; 13 } 14 } 15 int max=0; 16 for(int i=0;i<n;i++){ 17 for(int j=0;j<m;j++){ 18 if(i>0&&j>0){ 19 int min=array[i-1][j-1]; 20 if(array[i][j-1]<min)min=array[i][j-1]; 21 if(array[i-1][j]<min)min=array[i-1][j]; 22 if(min!=0&&array[i][j]!=0) 23 array[i][j]+=min;//array[i][j]=min+1;更节省时间 24 } 25 if(array[i][j]>max)max=array[i][j]; 26 } 27 }
28 34 cout<<max; 35 36 return 0; 37 }
机试完了,紧接着会有变态的性格测试,难熬的35分钟,选择的时候注意积极乐观和前后一致就行了,不然会被叫重做,无语得很....。通过机试之后,下午就是面试了,一面主要问项目,我被问得很深很细,问了其他同学说是就随便聊聊,二面综合面,就是闲聊了。