2014年北京邮电大学计算机考研机试试题及答案(上午)
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N;
scanf("%d",&N);
int a[N];
int b[100001];
memset(b,0,sizeof(b));
for(int i=0;i<N;i++)
{
scanf("%d",&a[i]);
b[a[i]]++;
}
int min_num=0;
int key=100001;
for(int i=0;i<100001;i++)
{
if(b[i]!=0&&b[i]>min_num)
{
min_num = b[i];
key = i;
}
if(b[i]!=0&&b[i]==min_num&&i<key)
{
key = i;
}
}
printf("%d\n",key);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
/*
看似麻烦,其实只需写出来旋转90度的就可以,180度的旋转两遍,270三遍即可
2
2 3
111
000
90
3 3
111
101
111
180
*/
void visit(char a[][51],int N,int M)
{
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
cout<<a[i][j];
}
cout<<endl;
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
int N,M;
cin>>N>>M;
char a[51][51];
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
cin>>a[i][j];
}
}
int angle;
scanf("%d",&angle);
if(angle==0)
{
visit(a,N,M);
}
if(angle==90)
{
char b[M][N];
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
b[j][N-i-1] = a[i][j];
}
}
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
cout<<b[i][j];
}
cout<<endl;
}
}
if(angle==180)
{
char b[M][N];
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
b[j][N-i-1] = a[i][j];
}
}
char c[N][M];
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
c[j][M-i-1] = b[i][j];
}
}
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
cout<<c[i][j];
}
cout<<endl;
}
}
if(angle==270)
{
char b[M][N];
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
b[j][N-i-1] = a[i][j];
}
}
char c[N][M];
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
c[j][M-i-1] = b[i][j];
}
}
char d[M][N];
for(int i=0; i<N; i++)
{
for(int j=0; j<M; j++)
{
d[j][N-i-1] = c[i][j];
}
}
for(int i=0; i<M; i++)
{
for(int j=0; j<N; j++)
{
cout<<d[i][j];
}
cout<<endl;
}
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
/*
floyd算法
2
3 3
1 2
1 3
2 3
4 2
1 2
2 3
*/
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N,M;
scanf("%d%d",&N,&M);
int a[N+1][N+1];
//定义初值
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
a[i][j]=N;
}
}
//赋最基本值
while(M--)
{
int u,v;
scanf("%d%d",&u,&v);
a[u][v] = 1;
a[v][u] = 1;
}
//利用floyd算法更新路径数组
for(int k=1;k<=N;k++)
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
if(a[i][k]+a[k][j]<a[i][j])
a[i][j] = a[i][k]+a[k][j];
}
}
}
//更新路径数组后,再次寻找中心节点
int min_point;
int min_value=0;
int max_define=10000000;
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
{
min_value+=a[i][j];
//cout<<"min_value: "<<min_value<<" max_value"<<max_define<<endl;
}
if(min_value<max_define)
{
max_define = min_value;
min_point = i;
//cout<<"min_value: "<<min_value<<endl;
}
min_value=0;
}
printf("%d\n",min_point);
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
/*
2
5
a=[]
a.append(0)
a.append(1)
a[0]
a[1]
8
lista=[]
lista.append(123)
lista.append(65)
lista[0]
lista.sort()
lista[0]
lista[]
listb[0]
*/
int string_to_int(string s)
{
int num = 0;
int len = s.length();
for(int i=len-1; i>=0; i--)
{
int key = 1;
int t = i;
while(t--)
{
key*=10;
}
num+=(s[len-i-1]-'0')*key;
}
return num;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int N;
scanf("%d",&N);
int a[N];
int add_num=0;
while(N--)
{
string s;
cin>>s;
int len = s.length();
//清空
if(s[len-1]==']'&&s[len-2]=='[')
{
memset(a,0,sizeof(a));
add_num=0;
continue;
}
//sort
if(s[len-1]==')'&&s[len-2]=='(')
{
sort(a,a+add_num);
}
//a.append(0)
int get=0;
string s2="";
if(s[len-1]==')'&&s[len-2]!='(')
{
for(int i=0; i<s.length(); i++)
{
if(s[i]==')')
{
get=0;
}
if(get==1)
{
s2+=s[i];
}
if(s[i]=='(')
{
get=1;
}
}
int add_value = string_to_int(s2);
//cout<<"add_value: "<<add_value<<endl;
a[add_num]=add_value;
//cout<<"---->a["<<add_num<<"]="<<add_value<<endl;
add_num++;
}
//a[0]
int get2=0;
string s3="";
if(s[len-1]==']'&&s[len-2]!='[')
{
for(int i=0; i<s.length(); i++)
{
if(s[i]==']')
{
get2=0;
}
if(get2==1)
{
s3+=s[i];
}
if(s[i]=='[')
{
get2=1;
}
}
int index = string_to_int(s3);
if(index>add_num||add_num==0)
{
printf("ERROR\n");
}
else
{
printf("%d\n",a[index]);
}
}
}
}
return 0;
}