【北理工研究生复试上机题】邮票面额问题

题目描述:

某人有8 角的邮票5 张,1 元的邮票4 张,1 元8 角的邮票6 张,用这些邮票中的一张

或若干张可以得到多少中不同的邮资?


有人这样做

#include<iostream>
using namespace std;
void main()
{
int sum=0;
for(int i=0;i<=5;i++)
for(int j=0;j<=4;j++)
for(int k=0;k<=6;k++)
{ sum++;
cout<<0.8*i+j+1.8*k<<" ";
}
cout<<endl;
cout<<sum<<endl;
}

很显然,这人没有考虑到重复的情况。得到的答案是210,但其实不少是重复的。例如5张8角的和4张一元的相同,所以需要排除重复情况才行。

我修改了以下,发现只有82种不同情况,这里需要用到find函数

#include<iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main()
{
	float a[1000];

	vector<float> b(1000);

	
	float temp;
	
	int sum=0;



	for(int i=0;i<=5;i++)
		for(int j=0;j<=4;j++)
			for(int k=0;k<=6;k++)
			{ 
				

				temp=0.8*i+j+1.8*k;

				cout<<0.8*i+j+1.8*k<<endl;

				vector<float>::iterator intIter =find(b.begin(), b.end(), temp);

				if(intIter==b.end())
				{
					b.push_back(temp);

					sum++;
				}
	
			}
	


	cout<<sum<<endl;

	system("pause");

	return 0;
}


你可能感兴趣的:(【北理工研究生复试上机题】邮票面额问题)