本文主要是介绍北理计算机学院2002年机试真题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
北京理工大学计算机学院复试上机题目
由于编者水平有限,如有错误,请多多包涵。欢迎各位指正,转载请注明,谢谢合作!
A部分
1. 某人有 8 角的邮票 5 张,1 元的邮票 4 张,1元 8 角的邮票 6 张,用这些邮票中的一张或若干张可以得到多少种不同的邮资?
#include<iostream>
#include<set>
using namespace std;/**
* 原理,在计算机中double类型的数据是有误差的,eg:计算机判断1.0可能不等于另一个1.0。
* 因此,数据单位我们采用角,即全部化为整数,这样比较,就不会出现误差了;
* 或者采用a-b<0.1的方式判断a与b相等。
*/// 存储邮资类型
set<double> s;
set<double>::iterator it;// i是8角的剩余数量,j是1元的剩余数量,k是1元8角的剩余数量,sum是当前邮资
void f(int i,int j, int k,double sum){if(i<0||j<0||k<0)return;double t=0;if(i>0){// 取8角的t=sum+8;// 判断是否已经有这种邮资// 没有这种邮资,则加入到记录表中if(s.find(t)==s.end())s.insert(t);f(i-1,j,k,t);}if(j>0){// 取1元的t=sum+10;// 判断是否已经有这种邮资// 没有这种邮资,则加入到记录表中if(s.find(t)==s.end())s.insert(t);f(i,j-1,k,t);}if(k>0){// 取1元8角的t=sum+18;// 判断是否已经有这种邮资// 没有这种邮资,则加入到记录表中if(s.find(t)==s.end())s.insert(t);f(i,j,k-1,t);}}int main(){s.insert(0);f(5,4,6,0);cout<<"共有邮资"<<s.size()<<"种"<<endl;cout<<"分别是:"<<endl;for(it=s.begin();it!=s.end();it++)cout<<*it/10.0<<" ";cout<<endl;
}
2.输入 n 值,使用递归函数,求杨辉三角形中各个位置上的值,按照如下形式打印输出图
形。例如:当 n=6 时。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
#include<iostream>
using namespace std;// 第n行,第k列元素的值
long f(int n,int k){if(k==0||k==n)return 1;// 当前元素为肩上两个元素之和return f(n-1,k-1)+f(n-1,k);
}int main(){int n;cin>>n;for(int i=0;i<n;i++){// 打印前面的空格for(int k=0;k<n-i;k++)cout<<" ";for(int j=0;j<=i;j++)cout<<f(i,j)<<" ";cout<<endl;}return 0;
}
B部分
1. 打印所有不超过 n(n<256)的,其平方具有对称性质的数。如 11*11=121。
#include<iostream>
using namespace std;int main(){int mul,n=0;int num[5];for(int i=1;i<256;i++){mul=i*i;while(mul){num[n++]=mul%10;mul/=10;}int j;for(j=0;j<n/2.0;j++)if(num[j]!=num[n-j-1])break;if(j>=n/2)cout<<i<<"*"<<i<<"="<<i*i<<endl;n=0;}return 0;
}
2. 编写一个求菲波那奇数列的递归函数,输入 n值,使用该递归函数,输出如下图形。例如:当n=6时。
0
0 1 1
0 1 1 2 3
0 1 1 2 3 5 8
0 1 1 2 3 5 8 13 21
0 11 2 3 5 8 13 21 34 55
#include<iostream>
using namespace std;void f(int pre1,int pre2,int n){if(n==0)return;cout<<pre1<<" "<<pre2<<" ";int newNum1=pre1+pre2;int newNum2=pre2+newNum1;f(newNum1,newNum2,n-1);
}int main(){int n;cin>>n;for(int i=0;i<n;i++){for(int j=0;j<(n-i)*2;j++)cout<<" ";cout<<0<<" ";f(1,1,i);cout<<endl;}return 0;
}
这篇关于北理计算机学院2002年机试真题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!