杭电2015复试上机真题

ps:题是别的地方copy过来的,代码是自己的

第一题:

给定一个字符串,计算字符串中数值的个数并求和。其中还包含了负号,若紧跟负号的是一个数值,则表示这是一个负数,若后面跟着的不是数字,则不表示什么。输入:一个字符串输出:数值个数 数值和
输入:312ab-2—9–a 
输出:3 301 

#include<stdio.h>
#include<stdlib.h>

int main(){
	char a[100];
	while(scanf("%s",a) != EOF){
		int numcount = 0; //输出用,数字个数 
		int sum = 0;      //输出用,和 
		
		char num[50];  //记录数字。转换成int型 
		int len = 0;   //记录数组长度 
		int sym = 1;   //记录该数字符号 
		
		char* p = a;
		while(*p != '\0'){ 
			if(*p >= '0' && *p <= '9'){
				num[len++] = *p;
			}
 			else{			//不是数字时,先输出数字,后判断'-' 
				if(len != 0){
					num[len] = '\0';
					sum += (atoi(num) * sym);					
					len = 0;    
					sym = 1;   //每次累加之后sym归1 
					numcount++;  
				}
				if(*p == '-' && *(p + 1) >= '0' && *(p + 1) <= '9'){      //看到-符号且下一位为数字,sym就变成 -1 
					sym = -1;
				}
			}
			p++;
		}
		if(len){
			num[len] = '\0';
			sum += (atoi(num) * sym);
			numcount++;  	
		}
		printf("%d %d\n",numcount,sum);
	}
	return 0;
}

第二题:

 

给定一个数字矩阵,如果上下左右数值相同,则表示是一个连通的区域。求矩阵中连通块的数量。

第一行为矩阵m行n列,然后输入矩阵元素。

输入:

5 6 

4 4 4 4 4 4 

4 2 3 3 1 4 

4 2 2 3 1 4 

4 2 3 3 1 4 

4 4 4 4 4 4 

输出 

/*
    连通块问题可以想象这是个有颜色的棋盘,如果只有与一个区域染成了白色,那么连通块数量为1(可以认为成自成一连通块)
    如果此时白色左边染黑,同理,连通块数量为2。
    如果黑色下边染黑,那么连通块数量为2,因为新增的黑块与原来的黑块连成了新的一个整体的连通块,数量不变,同理不染黑染白则返回3
    因为新的白色在四个方向上并没有与第一个白块相邻(有些题判断八个方向时,是连通的)
    很明显,原题的输入中1,2,3,4都为连通,且连通块各只有1一个
*/
#include<cstdio>
#include<cstdlib>
#include<stack>
//深度搜索典型题,用栈实现,非递归 
using namespace std;

int MAX_M;
int MAX_N;

void DFS(int** a,int** b,int m,int n){	
	int f = a[m][n];
	stack<int> s;   //创建int型的栈,化二维坐标为一位整形 r = m * MAX_M + n 
	s.push(m * MAX_N + n);	
	
	do{
		int x = s.top() / MAX_N;   //转换为二维坐标 
		int y = s.top() % MAX_N; 
		b[x][y] = 1;
		s.pop(); 
		if(y > 0 && b[x][y - 1] == 0 && a[x][y - 1] == f){   				//左块进栈 满足条件不为边界且未被访问且值相等 
			s.push(x * MAX_N + y - 1);
		} 
		if(y < MAX_N - 1 && b[x][y + 1] == 0 && a[x][y + 1] == f){			//右块进栈 
			s.push(x * MAX_N + y + 1);
		} 
		if(x > 0 && b[x - 1][y] == 0 && a[x - 1][y] == f){					//上块进栈 
			s.push(MAX_N * (x - 1) + y);
		}
		if(x < MAX_M - 1 && b[x + 1][y] == 0  && a[x + 1][y] == f){			//下块进栈 
			s.push(MAX_N * (x + 1) + y);
		}		
	}while(!s.empty());
	return;
}   

int main(){
	int m,n;
	scanf("%d%d",&m,&n);
	MAX_M = m;
	MAX_N = n;
	
	int** a;  //存储数组 
	int** b;  //访问数组 
	
	a = (int**)malloc(sizeof(int*) * m);  //使用malloc二维数组,先sizeof(int*) * 行数,再在for循环中sizeof(int) * 列数 
    for(int i = 0;i < m;i++){
		a[i] = (int*)malloc(sizeof(int) * n);  
	} 
	
	b = (int**)malloc(sizeof(int*) * m);
    for(int i = 0;i < m;i++){
		b[i] = (int*)malloc(sizeof(int) * n);  
	}  
    
    for(int i = 0;i < m;i++){
    	for(int j = 0;j < n;j++){
    		scanf("%d",&a[i][j]);   
    		b[i][j] = 0;            //未访问为0 
		}
	} 
	
	int num = 0;
	for(int i = 0;i < m;i++){
		for(int j = 0;j < n;j++){
			if(b[i][j] == 0){
				DFS(a,b,i,j);  //如果该点未被访问过,则将该点进行DFS,并将符合条件的点的对应访问数组置1 
				num++;
			}
		}
	}	
	printf("%d",num);
	return 0;
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 杭州电子科技大学计算机考研复试题材料常被发布到计算机技术社区CSDN上,备受广大考生的关注。根据CSDN上的相关帖子和评论,可以了解到杭电计算机复试有以下几个特点。 首先,杭电计算机复试难度较大。复试考察内容主要涉及数据结构、算法、操作系统等多个学科,题目难度较高。考生需要具备扎实的计算机基础知识和较高的分析解决问题的能力。 其次,杭电计算机复试考察形式多样。除了笔试外,还包括机试、面试等环节。机试内容涉及语言编写和程序设计等方面,考生需要在一定时间内完成一定难度的编程题目。面试则需要考生展示自己的个人素质、优点、缺点等,以便考官全面评估。 最后,杭电计算机复试注重实践能力。考生需要具备实际的编程经验和项目经验,才能在复试脱颖而出。如果没有过多的实践经验,也可以通过参加计算机竞赛等活动提高自己的实践能力。 综上所述,杭电计算机复试相对较难,考察形式多样,注重考生的实践能力。考生需要在备考过程注重提高自己的计算机基础知识,增强实践能力,才能在复试取得较好的成绩和表现。 ### 回答2: 杭电计算机复试听说是非常有难度的,需要具备扎实的计算机基础知识和优秀的编程能力。首先,需要了解杭电计算机专业的课程设置、教学模式和学科特点,并深入研究本专业领域的前沿技术和发展趋势。其次,需要具备良好的编程能力和独立思考能力,能够熟练掌握多种编程语言和算法,并且有创造性地解决问题。在复试,还需要有清晰的思路、流畅的表达和扎实的英语能力,能够与面试官进行深入交流和探讨。最后,需要展示出对计算机领域的热情和认真的学习态度,表达出加入杭电计算机专业的愿望和动力。总而言之,杭电计算机复试一个很有挑战性的过程,需要准备充分、自信、深入思考,并且尽可能展现出自己的优势和特点,才能获得成功。 ### 回答3: 杭州电子科技大学计算机科学与技术专业复试为CSDN岗位。该岗位主要面试内容包括计算机基本知识、算法与数据结构、编程语言和操作系统。在基本知识方面,主要涉及计算机组成原理、操作系统原理、计算机网络等知识点,要考生具备扎实的计算机基础知识和深刻的理解。在算法与数据结构方面,主要测试考生的分析和解决问题的能力,要考生熟练掌握基本算法和数据结构的应用场景,并能灵活地运用到实际问题。在编程语言方面,主要考察考生的编程能力和代码质量,要考生熟练掌握至少一门编程语言,并能够使用其编写高质量的代码。最后,在操作系统方面,主要测试考生对操作系统的理解和应用能力,包括Linux的基本命令操作、进程管理、文件系统等知识点,要考生具备一定的实践经验和操作系统基础知识。总体来说,杭电计算机复试CSDN岗位比较综合,需要考生具备全面的计算机科学知识、熟练掌握编程和操作系统技能,并具有较高的分析和解决问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值