欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

2002年北理复试上机题

程序员文章站 2022-06-08 09:15:28
...

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
画图分析:

2002年北理复试上机题

#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时,这里需要拓展:

2002年北理复试上机题

#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

2002年北理复试上机题

#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;
}