您的位置:首页 > 理论基础

2002年清华大学计算机研究生机试真题(第I套)

2016-04-01 22:39 399 查看

题目1072:有多少不同的面值组合?

题目描述:
某人有8角的邮票5张,1元的邮票4张,1元8角的邮票6张,用这些邮票中的一张或若干张可以得到多少种不同的邮资?

输入:
题目没有任何输入

输出:
按题目的要求输出可以得到的不同邮资的数目

#include<iostream>
using namespace std;
int find(int a[],int n,int sum)//邮资查重函数
{
for(int i=0;i<n;i++)
{
if(a[i]==sum)
return 0;
}
return 1;
}
int main()
{
int a,b,c;
int ans[1000],n=0;
int sum=0;
for(int a=0;a<=5;a++)//8角的邮票可以选择0-5张
{
for(int b=0;b<=4;b++)//一元的邮票可以选择0-4张
{
for(int c=0;c<=6;c++)//1元8角的邮票可以选择0-6张
{
sum=a*8+b*10+c*18;//为了不用double类型,同时扩大十倍
if(find(ans,n,sum)==1)//确保在之前没有出现过这个邮资
{
ans
=sum;
n++;
}
}
}
}
cout<<n-1<<endl;
}



题目1073:杨辉三角形

题目描述:
输入n值,使用递归函数,求杨辉三角形中各个位置上的值。

输入:
一个大于等于2的整型数n

输出:
题目可能有多组不同的测试数据,对于每组输入数据,

按题目的要求输出相应输入n的杨辉三角形。

样例输入:
6


样例输出:
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 a[100][100];
int recursion(int i,int j)//杨辉三角的递归求解
{
if(a[i][j]==0)//说明a[i][j]未被处理,如果被处理了就直接输出,记忆化操作 !!
{
if(i==j||j==1)//对角线和第一列都是1.
a[i][j]=1;
else
a[i][j]=recursion(i-1,j)+recursion(i-1,j-1);//递归式
}
return a[i][j];

}
int main()
{
int n;
while(cin>>n&&n>=2)
{
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j!=i)
cout<<recursion(i,j)<<" ";//调用递归函数
else
cout<<recursion(i,j)<<endl;
}
}
}
return 0;
}


非递归:

#include<iostream>
using namespace std;
int a[100][100];
int main()
{
int n;
while(cin>>n&&n>=2)
{
for(int i=2;i<=n;i++)
a[i][1]=1;//第一列的数值均为0
a[2][2]=1;//第一行第一列的元素也是1
for(int i=3;i<=n;i++)
{
for(int j=2;j<=i;j++)
a[i][j]=a[i-1][j]+a[i-1][j-1];//迭代递推式
}
for(int i=2;i<=n;i++)
{
for(int j=1;j<=i;j++)
{
if(j!=i)
cout<<a[i][j]<<" ";
else
cout<<a[i][j]<<endl;
}
}
}
return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: