首页 > 学院 > 开发设计 > 正文

蓝桥杯——计算机研究生机试真题(2017.2.18)

2019-11-08 02:59:24
字体:
来源:转载
供稿:网友

1. (2011年西北工业大学计算机研究生机试真题)调整方阵题目描述:输入一个N(N<=10)阶方阵,按照如下方式调整方阵:1.将第一列中最大数所在的行与第一行对调。2.将第二列中从第二行到第N行最大数所在的行与第二行对调。依此类推...N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。N.输出这个方阵输入:包含多组测试数据,每组测试数据第一行为一个整数N,表示方阵的阶数.接下来输入这个N阶方阵.输出:调整后的方阵样例输入:43 6 8 76 7 5 38 6 5 39 8 7 2样例输出:9 8 7 26 7 5 33 6 8 78 6 5 3

源代码:

#include <stdio.h>#define maxn 12int a[maxn][maxn]; void Fun(int a[][maxn],int N){	int i,j=0,k,temp;	int max,maxln;	while(j<N)	{		i=j;		max=a[i][j];		maxln=j;		for(i=j;i<N;i++)		{			if(a[i][j]>max)			{				max=a[i][j];				maxln=i;			}		}		for(i=j;i<N;i++)		{			if(i==maxln)			{				for(k=0;k<N;k++)				{					temp=a[j][k];					a[j][k]=a[maxln][k];					a[maxln][k]=temp;				}				break;			}		}		j++;	}	for(i=0;i<N;i++)	{		for(k=0;k<N-1;k++)			PRintf("%d ",a[i][k]);		printf("%d/n",a[i][N-1]);	}}int main(){	int N;	int i,j;	while(scanf("%d",&N)!=EOF)	{		for(i=0;i<N;i++)			for(j=0;j<N;j++)				scanf("%d",&a[i][j]);		Fun(a,N);	}	return 0;}程序截图:

2. (2011年西北工业大学计算机研究生机试真题)合并符串题目描述:给定两个字符串S1和S2,合并成一个新的字符串S。合并规则为,S1的第一个字符为S的第一个字符,将S2的最后一个字符作为S的第二个字符;将S1的第二个字符作为S的第三个字符,将S2的倒数第二个字符作为S的第四个字符,以此类推。输入:包含多组测试数据,每组测试数据包含两行,代表长度相等的两个字符串S1和S2(仅由小写字母组成,长度不超过100)。输出:合并后的新字符串S样例输入:abcdef样例输出:afbecd

源代码:

#include <stdio.h>#include <string.h>#define maxlen 210      //注意新字符串数组大小 至少为100*2=200 void Mystrcat(char s1[],char s2[]){	int i=0,j=strlen(s2)-1;	int k=0,t;	char s[maxlen];	while(s1[i]!='/0' && s2[j]!='/0')	{		s[k++]=s1[i];		s[k++]=s2[j];		i++,j--;	}	s[k]='/0';	printf("%s/n",s);}int main(){	char s1[maxlen],s2[maxlen];	while(scanf("%s",s1)!=EOF)	{		scanf("%s",s2);		Mystrcat(s1,s2);	}	return 0;}程序截图:

拓展:“长度相等的两个字符串S1和S2(仅由小写字母组成,长度不超过100)” 条件改为“字符串S1和S2长度可不等”,其余条件不变源代码:
#include <stdio.h>#include <string.h>#define maxlen 105void Mystrcat(char s1[],char s2[]){	int i=0,j=strlen(s2)-1,k=0;	char s[maxlen];	while(i<strlen(s1) && j>=0)	{		s[k++]=s1[i];		s[k++]=s2[j];		i++,j--;	}	while(i<strlen(s1))           //若串s1比s2长	{		s[k++]=s1[i];		i++;	}	while(j>=0)                   //若串s2比s1长	{		s[k++]=s2[j];		j--;	}	s[k]='/0';	for(i=0;i<k;i++)		printf("%c",s[i]);	printf("/n");}int main(){	char s1[maxlen],s2[maxlen];	while(scanf("%s",s1)!=EOF)	{		scanf("%s",s2);		Mystrcat(s1,s2);	}	return 0;}程序截图:

3. (2012年北京邮电大学计算机研究生机试真题)二进制数题目描述:  大家都知道,数据在计算机里中存储是以二进制的形式存储的。  有一天,小明学了C语言之后,他想知道一个类型为unsigned int 类型的数字,存储在计算机中的二进制串是什么样子的。  你能帮帮小明吗?并且,小明不想要二进制串中前面的没有意义的0串,即要去掉前导0。输入:第一行,一个数字T(T<=1000),表示下面要求的数字的个数。接下来有T行,每行有一个数字n(0<=n<=10^8),表示要求的二进制串。输出:输出共T行。每行输出求得的二进制串。样例输入:523535262456275989835样例输出:101111000010111101001000000110110111101001111110001101010001011

源代码:

#include <stdio.h>#include <string.h>#define maxlen 100000char num[maxlen];int main(){	int i,j,k,t,T;	unsigned int n;	scanf("%d",&T);	for(i=0;i<T;i++)	{		scanf("%d",&n);		j=0,t=n;		if(t==0)                //特别注意0也在数据范围内		{			printf("0/n");			continue;		}		while(t)		{			num[j++]=(t%2)+'0';			t/=2;		}		num[j]='/0';		for(k=j-1;k>=0;k--)			printf("%c",num[k]);		printf("/n");	}	return 0;}程序截图:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表