机试练习 北理14年01、02题 打开文件顺序

北京理工大学2014年机试练习0102题 打开文件夹顺序



本来想了半天没思路,后来发现自己理解偏差,哎,虐心啊,回到正轨,发现这道题思路比较简单,就是判断新输入的文件夹的序号是否和最近输入的3个文件夹的序号相同,如果相同,则忽略,不相同则插入双端队列,(用栈也行,,)然后依次输出最近三次的文件夹序号即可,下面是代码:

#include <iostream>
#include <deque>
using namespace std;
int main(){
deque<int> d;
cout<<"input:";
int n;
	while(cin>>n)
	{
		if(d.size()==0)//里面没有元素,直接插入
		{
			d.push_front(n);
			cout<<"output:"<<d[0]<<endl;
		}
		else if(d.size()==1)//里面已经有了一个元素
		{
			if(d[0]!=n)//若要插入元素和已有元素不等,则插入
			{
				d.push_front(n);
				cout<<"output:"<<d[0]<<" "<<d[1]<<endl;
			}
			else
			{//若要插入元素和已有元素相等,则不插入
			cout<<"output:"<<d[0]<<endl;
			}
		}
	    else if(d.size()==2)
			{
		     if(d[0]!=n&&d[1]!=n)//要插入的元素和已有的个元素均不等
				{
					d.push_front(n);
					cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
				}
				else
				{
				cout<<"output:"<<d[0]<<" "<<d[1]<<endl;
				}
			}
		else if(d.size()>=3)
		{
			if(d[0]!=n&&d[1]!=n&&d[2]!=n)
			{//插入元素和前三个元素均不相同
				d.push_front(n);
				cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
			}
			else
			{
			cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
			}
		}
		cout<<"input:";
	}
	return 0;
}
代码思路还算清晰,紧接着是第二道题:

实则是第一题的第二问:

基本没啥区别,不过事实证明我又想复杂了,在d.size()>=3的情况下,只需再判断三种情况,即新输入的文件序号和最近三次的哪个相同,交换,输出即可,,,

(哎,愁人啊)

#include <iostream>
#include <deque>
using namespace std;
int main(){
deque<int> d;
cout<<"input:";
int n;
	while(cin>>n)
	{
		if(d.size()==0)//里面没有元素,直接插入
		{
			d.push_front(n);
			cout<<"output:"<<d[0]<<endl;
		}
		else if(d.size()==1)//里面已经有了一个元素
		{
			if(d[0]!=n)//若要插入元素和已有元素不等,则插入
			{
				d.push_front(n);
				cout<<"output:"<<d[0]<<" "<<d[1]<<endl;
			}
			else
			{//若要插入元素和已有元素相等,则不插入
			cout<<"output:"<<d[0]<<endl;
			}
		}
	    else if(d.size()==2)
			{
		     if(d[0]!=n&&d[1]!=n)//要插入的元素和已有的个元素均不等
				{
					d.push_front(n);
					cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
				}
				else
				{
				cout<<"output:"<<d[0]<<" "<<d[1]<<endl;
				}
			}
			
			
		else if(d.size()>=3)
		{
			if(d[0]!=n&&d[1]!=n&&d[2]!=n)
			{//插入元素和前三个元素均不相同
				d.push_front(n);
				cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
			}
			else//否则三个中肯定有一个和n相同
			{
				if(d[0]==n)
				cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
			else if(d[1]==n)
			{
				int temp;
				temp=d[1];
				d[1]=d[0];
				d[0]=temp;
				cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
			}
			else if(d[2]==n)
			{
			int temp;
			temp=d[2];
			d[2]=d[1];
			d[1]=d[0];
			d[0]=temp;
			cout<<"output:"<<d[0]<<" "<<d[1]<<" "<<d[2]<<endl;
			}
			}
		}
	  cout<<"input:";
	}
	
  return 0;
}

另外,转载关于deque的用法的csdn博文 ,感谢博主

转载请标明出处,原文地址:http://blog.youkuaiyun.com/morewindows/article/details/6946811



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值