2020年华科研究生复试机试题,包含测试数据和题目,里面是文档和要所报文件。供考研学子学习使用。此数据量有点大,涉及到链表,数据转换,和容器。以下代码都是我写的,欢迎交流。原题目和测试文档链接地址是[https://download.csdn.net/download/qq_41476542/12415227]。供需要测试的人使用
在这里插入代码片
// HK2020ProAndAns.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include
#include
#include
#include
#include
#include
#include
using namespace std;
struct points
{
int xuhao;用于最终得出结果
int inumber;
int Ep[200];
vector<int> vetoreverypoint;用于存每一个数值
};
vector<points> vecP;
vector<int> vecPlastselect;
typedef list <int> intList;
unsigned int iLinenumber=0;有多少个集合
unsigned int iAllPoint=0;有多少个元素
int IAllpoint[2000000][200];///二维数组用于表示所有的点(不能放进函数中定义,否则内存不够)
int IAllnuber[2000000];
int Itemp=0;///临时变量
void CharToInt(char *Intput,unsigned int * OutPut)
{
sscanf((LPSTR)(LPCTSTR)Intput,"%d",&OutPut);
}
void selectjiHe( vector<points> vecP)
{
int selectstart=0;
int selectCharstart=0;
Itemp=vecP.size();
int selectPoint=1,sj=0;
while(true)
{
Itemp=vecP[selectstart].vetoreverypoint[selectCharstart];
Itemp=vecP[selectPoint].vetoreverypoint[sj];
if (vecP[selectstart].vetoreverypoint[selectCharstart]!=vecP[selectPoint].vetoreverypoint[sj])
{
Itemp=vecP[selectPoint].vetoreverypoint.size();
if (selectPoint<iLinenumber&&sj==Itemp)
{
sj=0;
selectPoint++;
}
else if (selectPoint<iLinenumber&&sj<Itemp)
{
sj++;
}
else if(selectPoint>iLinenumber)
{
cout<<"留下集合%d"<<selectPoint<<endl;
}
}
else
{
Itemp=vecP[selectstart].vetoreverypoint.size();
if (selectstart<iLinenumber&&selectCharstart>=Itemp)
{
selectstart++;
}
else if (selectstart<iLinenumber&&selectCharstart<Itemp)
{
selectCharstart++;
}
else if (selectstart>iLinenumber)
{
break;
}
}
}
}
void tanxinselect(vector<points> vecP)
{
//vecPlastselect=vecP;
Itemp=vecP.size();
points tempTaget;
intList _intList;
int ijiheveceornumber=0;
int IRecordBkPoint=0;///记录断点位置
// for (int i=0;i
// {
// for (int paixuj=0;paixuj
// {
// if (vecP[paixuj].inumber<=vecP[paixuj+1].inumber)
// {
// tempTaget=vecP[paixuj];
// vecP[paixuj]=vecP[paixuj+1];
// vecP[paixuj+1]=tempTaget;
// cout<<"paixuj"<
// }
//
// }
// cout<<"i="<
// }
往list容器里面存数据
for(int j=0;j<iAllPoint;j++)
{
_intList.push_back(j);
}
for(int vj=0;vj<iAllPoint;vj++)
{
vecPlastselect.push_back(vj);
}
int bkLargeTosmall=0;///记录从大道小的擦除地方
int ivecp=0;
list<int>::reverse_iterator Iter;
intList::iterator iter_e;
int vetlarg=vecPlastselect.size();
for (int n=0;n<Itemp;n++)
{
int sizetrmp=_intList.size();
if (sizetrmp==0)
{
bkLargeTosmall=n;
break;
}
if (vecPlastselect.size()==0)
{
bkLargeTosmall=n;
}
cout<<"留下的元素为"<<n<<endl;
cout<<"容器大小为"<<vecPlastselect.size()<<endl;
if (vecPlastselect.size()==0)
{
bkLargeTosmall=n;
break;
}
else
{
int iitemp;
int num=vecP[n].inumber;
for (int mv=0;mv<num;mv++)
{
sizetrmp=_intList.size();
int jjt=0;
bkLargeTosmall=n ;
int ite=0;
// for (iter_e=_intList.begin();iter_e!=_intList.end();iter_e++)
// {
// iitemp=vecP[n].vetoreverypoint[mv];
// ite=*iter_e;
// cout<<"*iter_e为"<<*iter_e<
// if(iitemp == *iter_e)
// {
//
// //_intList.erase(iter_e);
// _intList.remove(iitemp);
// sizetrmp=_intList.size();
//
// break;
// bkLargeTosmall=n;
// iter_e=_intList.begin();
//
// }
//
// }
///
// for (Iter=_intList.rbegin();Iter!=_intList.rend();Iter++ )
// {
// iitemp=vecP[mv].vetoreverypoint[jjt];
// if(iitemp == *Iter)
// {
// // _intList.erase((Iter).base());
// cout<<"*iter_e为"<<*Iter<
// list::iterator iter = _intList.erase((++Iter).base());
// Iter = list::reverse_iterator(iter);
//
//
// }
//
// }
ite=0;
if (vecPlastselect.size()==0)
{
bkLargeTosmall=n;
}
iitemp=vecP[n].vetoreverypoint[mv];
for (int vpi=0;vpi<vecPlastselect.size();vpi++)
{
if(iitemp ==vecPlastselect[vpi] )
{
ite++;
vecPlastselect.erase(vecPlastselect.begin()+vpi);
break;
}
}
}
}
}
int Iputpoint;
for(int bk=0;bk<bkLargeTosmall;bk++)
{
Iputpoint=vecP[bk].xuhao;
cout<<"留下的元素为"<<Iputpoint<<endl;
}
}
int main()
{
string str;//利用string来接受读入的源代码
points vectorPoint;
ifstream file("D:\\我的文档\\WeChat Files\\xpj13098878561\\FileStorage\\File\\2020-05\\计算机专业实践考核\\SetCoveringTestData\\test01.txt");
int Itempshuzu[200];
int cnt = 1;//记录当前行号
if (!file.is_open())
{
cout << "文件打开失败!" << endl;
}
string Lineone="";//取第一行数据确定用多少个数组
char Ctemp[1000];//用于临时存储数据
getline(file, Lineone);
char ClineNumber[10]={0};
char AllPoint[10]={0};
int Onebk=0;
int j=0;
for ( j=0;j<50;j++)
{
if (Lineone[j]==' ')
{
Onebk=j;
break;
}
else
{
ClineNumber[j]=Lineone[j];
}
}
Itemp=0;
for ( j=Onebk+1;j<50;j++)
{
if (Lineone[j]=='\n'||Lineone[j]==' '||Lineone[j]=='\0')
{
break;
}
else
{
AllPoint[Itemp]=Lineone[j];
Itemp++;
}
}
sscanf((LPSTR)(LPCTSTR)ClineNumber,"%d",&iLinenumber);
sscanf((LPSTR)(LPCTSTR)AllPoint,"%d",&iAllPoint);
//
string strTempnumber="";
int number=0;
//strTempnumber.Format("%d",number);
int everyLinenumber=0;//每个集合元素个数
int Linelength=0;//用于表示每行的长度
int acm=10;
// int smal[acm];
// int IAllpoint[100][200];///二维数组用于表示所有的点
int IEPTP=0;//每个元素存储的位置去存进二维数组中
int tln=0;//用于给char赋值,表示赋值过程中的位置
int Icen;//用于隔开每个点的字符串
int IGetPointNumber=0;//用于表示获取到的集合的数量
// int ll=1;
int oneJihePoint=0;//一个集合的点数
int INumbertimes=0;///用于存放数量的个数
for(int ll=1;ll<iLinenumber*3+1;ll++)
{
getline(file, str);
if (ll%2==0)
{
Linelength=sizeof(str);
memset(Ctemp,0,1000);
for(tln=0;tln<Linelength;tln++)
{
Ctemp[tln]=str[tln];
}
sscanf((LPSTR)(LPCTSTR)Ctemp,"%d",&everyLinenumber);
IAllnuber[INumbertimes]=everyLinenumber;
INumbertimes++;
}
if (ll%3==0)
{
IEPTP=0;
Icen=0;
Linelength=str.length();
memset(Ctemp,0,1000);
for(tln=0;tln<Linelength;tln++)
{
if (str[tln]==' ')
{
sscanf((LPSTR)(LPCTSTR)Ctemp,"%d",&Itemp);
IAllpoint[IGetPointNumber][IEPTP]=Itemp;
vectorPoint.xuhao=IGetPointNumber;
vectorPoint.vetoreverypoint.push_back(Itemp);
vectorPoint.inumber=everyLinenumber;
Icen=0;
IEPTP++;
}
else
{
Ctemp[Icen]=str[tln];
Icen++;
}
}
vecP.push_back(vectorPoint);
}
//cout<
}
tanxinselect(vecP);
// selectjiHe(vecP);
system("pause");
}