2013年北航研究生复试机试真题
1、分数化简
题目描述:
给一个真分数的分子分母,输出约分后的分子分母。
自测代码:
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,m;
cin>>n>>m;
int a=max(m,n);
int b=min(m,n);
while(b!=0)
{
int t=b;
b = a % b;
a = t;
}
n /= a;
m /= a;
cout<<n<<" "<<m;
return 0;
}
2、八皇后
没有明确的题目描述,按照经典的8皇后问题写的代码。给一个8行8列的矩阵,每一行放一个皇后,要求所有皇后不能同行同列同在对角线。
自测代码:
#include<iostream>
using namespace std;
int cnt=0;
int q[8]={-1};
bool check(int i,int j)
{
for(int k=0;k<i;k++)
{
if(q[k]==j || abs(q[k]-j) == abs(k-i))
return false;
}
return true;
}
void print()
{
cout<<endl;
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
if(j == q[i]) cout<<"1 ";
else cout<<"0 ";
}
cout<<endl;
}
}
int main()
{
int i=0,j=0;
while(i<8)
{
while(j<8)
{
if(check(i,j))
{
q[i]=j;
j=0;
break;
}
else j++;
}
if(q[i]==-1)
{
if(i==0) break;
else
{
i--;
j=q[i]+1;
q[i]=-1;
continue;
}
}
if(i==7)
{
cnt++;
print();
j=q[i]+1;
q[i]=-1;
continue;
}
i++;
}
cout<<cnt<<endl;
return 0;
}
3、科学计数法
题目描述:
给出一个标准输入的正数(开头结尾没有多余的0),输出其科学记数法表示。比如,输入0.000002,输出2e-6;输入123.456,输出1.23456e2;输入123456,输出1.23456e5
自测代码:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
cin>>s;
if(s.length()==1)
{
cout<<s;
return 0;
}
if(s[0]=='0' && s[1]=='.')
{
int i=2;
while(i<s.length())
{
if(s[i]>='1' && s[i]<='9') break;
i++;
}
if(i==s.length()) cout<<"0";//0.00000的情况
else
{
int t=i-1;
cout<<s[i++];
if(i<s.length()) cout<<".";
for(i;i<s.length();i++) cout<<s[i];
cout<<"e-"<< t;
}
}
else
{
int index=s.find(".");
if(index != -1)//有小数点
{
int t=index-1;
cout<<s[0]<<".";
for(int i=1;i<s.length();i++)
{
if(s[i]!='.') cout<<s[i];
}
if(t>0)
cout<<"e"<<t;
}
else
{
cout<<s[0]<<".";
for(int i=1;i<s.length();i++)
cout<<s[i];
cout<<"e"<<s.length()-1;
}
}
return 0;
}