2002年北理复试上机题
A:
1、某人有 8 角的邮票 5 张,1 元的邮票 4 张,1元 8 角的邮票 6 张,用这些邮票中的一张或若干张可以得到多少种不同的邮资?
题目要求是得到不同的邮资,也就是最后的总价值是不同的。这里我们可以考虑完所有的情况,然后去掉重复的就可以了。
#include<iostream>
#include<set>
using namespace std;
//1、某人有 8 角的邮票 5 张,1 元的邮票 4 张,1元 8 角的邮票 6 张,用这些邮票中的一张或若干张可以得到多少种不同的邮资?
int main()
{
set<double> s;
for(int i=0;i<5;i++)
for(int j=0;j<4;j++)
for(int k=0;k<6;k++){
if(!(i==j and j==k and k==0)){//去掉0 0 0 情况
s.insert(i*0.8+j+k*1.8);
}
}
cout<<"所有的邮资组成如下:"<<endl;
int count=0;
for(set<double>::iterator it=s.begin();it!=s.end();it++){
count++;
cout<<(*it)<<" ";
}
cout<<"\n一共有"<<count<<"种"<<endl;
return 0;
}
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;
int fun(int i,int j){
if(i+j==7||i==j+5)
return 1;
else if(i+j<7 || j+5<i)
return 0;
else return fun(i-1, j-1)+fun(i+1,j-1);
}
int main()
{
for(int i=1;i<7;i++){
for(int j=1;j<12;j++){
int res = fun(j,i);
if(res==0){
cout<<" ";
}else cout<<res;
}
cout<<endl;
}
return 0;
}
但是上面的只是h=6时,这里需要拓展:
#include<iostream>
using namespace std;
//int fun(int i,int j){
// if(i+j==7||i==j+5)
// return 1;
// else if(i+j<7 || j+5<i)
// return 0;
// else return fun(i-1, j-1)+fun(i+1,j-1);
//}
int fun(int i,int j,int h){
if(i+j==h+1||j+h-1==i)
return 1;//斜线
else if(i+j<h+1 || j+h-1<i)
return 0;
else return fun(i-1,j-1,h)+fun(i+1,j-1,h);
}
int main()
{
cout<<"请输入高度:";
int h;
cin>>h;
for(int i=1;i<h+1;i++){
for(int j=1;j<2*h;j++){
int res = fun(j,i, h);
if(res==0){
cout<<" ";
}else cout<<res;
}
cout<<endl;
}
return 0;
}
B:
1、打印所有不超过 n(n<256)的,其平方具有对称性质的数(回文数)。如 11*11=121。
拓展:水仙花数”是指一个三位数其各位数字的立方和等于该数本身,例如153是“水仙花数”,因为:153 = 13 + 53 + 33。
#include<iostream>
using namespace std;
bool isSymmetry(int n){
//回文数判断,思路:整数反转
int result=0,count=0,remainder,original=n;
while(n){
count++;
remainder = n%10;
result=result*10+remainder;
n = n/10;
}
if(result!=original) return false;
return true;
}
int main()
{
for(int i=1;i<256;i++){
if(isSymmetry(i))
cout<<i<<" ";
}
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 1 1 2 3 5 8 13 21 34 55
#include<iostream>
using namespace std;
//0 1 1 2 3 5 8
int Fibonacci(int n){
if(n==0) return 0;
else if(n==1 || n==2) return 1;
else return Fibonacci(n-2)+Fibonacci(n-1);
}
void printGraph(int n){
int num=1;
for(int i=1;i<=n;i++){
for(int j=1;j<n+1-i;j++)
cout<<" ";
for(int j=0;j<num;j++){
cout<<Fibonacci(j)<<" ";
}
num+=2;
cout<<endl;
}
}
int main()
{
cout<<"请输入图形的高度:";
int n=0;
cin>>n;
printGraph(n);
return 0;
}
上一篇: ExtJS异步加载树节点(权限管理)
下一篇: 怎样可以轻松减肥 6大方法教给你