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

来源:互联网 发布:如何删除wifi连接网络 编辑:程序博客网 时间:2024/05/16 10:49

1. (2011年西北工业大学计算机研究生机试真题)调整方阵
题目描述:
输入一个N(N<=10)阶方阵,按照如下方式调整方阵:
1.将第一列中最大数所在的行与第一行对调。
2.将第二列中从第二行到第N行最大数所在的行与第二行对调。
依此类推...
N-1.将第N-1列中从第N-1行到第N行最大数所在的行与第N-1行对调。
N.输出这个方阵
输入:
包含多组测试数据,每组测试数据第一行为一个整数N,表示方阵的阶数.
接下来输入这个N阶方阵.
输出:
调整后的方阵
样例输入:
4
3 6 8 7
6 7 5 3
8 6 5 3
9 8 7 2
样例输出:
9 8 7 2
6 7 5 3
3 6 8 7
8 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
样例输入:
abc
def
样例输出:
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行。每行输出求得的二进制串。
样例输入:
5
23
535
2624
56275
989835
样例输出:
10111
1000010111
101001000000
1101101111010011
11110001101010001011

源代码:

#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;}
程序截图:


1 0
原创粉丝点击