硕士研究生计算机复试上机试题
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
}
}
if(c!=' '&&c!='\n'&&c!='\r'&&c!='\t'&&c!=-1) wordNum++;
ifs.close();
cout<<wordNum;
int a;
std::cin>>a;
return 0;
}
1.输入一个数列以0位结束标志,建立链式线性表,查找其中最大的数并输出删除释放节点,然后对剩余的进行排序,并输出释放节点
string front=input.substr(0,firstZIdx);
string rear=input.substr(lastJidx+1);
string middle=input.substr(firstZIdx+1,lastJidx-firstZIdx-1);
if(!isAllO(front)||!isAllO(rear)||middle.length()==0||!isAllO(middle)||(firstZIdx>length-1-lastJidx)){return false;}
if(front==rear&&middle=="o")
{
return true;
}
else
{
string newStr=input.erase(length-front.length());
newStr=newStr.erase(firstZIdx+1,1);
return judge(newStr);
}
p=p->next;
}
cout<<"The max num is :"<<max<<"\nAfter deleting it ,the list is:\n";
p=n->next;
n->next=n->next->next;
free(p);
length--;
printList(head);
//sort
int inputNum,i,j,plen,temp;
int nums[1000],num1[1000];
while(scanf("%d",&inputNum)!=EOF)
{
for(i=0,plen=0;i<inputNum;i++)
{
scanf("%d",&nums[i]);
if(exist(num1,plen,nums[i])==-1)
}
p=p->next;
}
}
printList(head);
//print and free
while(head->next!=NULL)
{
cout<<head->next->data<<" ";
p=head->next;
free(head);
head=p;
}
free(head);
cout<<endl;
printf(" ");
printf("%d",exist(num1,plen,nums[i])+1);
}
printf("\n");
}
return 0;
}
/***
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
***/
#include<iostream>
length++;
}
printList(head);
//find max
int max=0;
n=p=head;//parent
while(p->next!=NULL)
{
if(p->next->data>max)
{
max=p->next->data;
n=p;//n point to the max's parent
{
sum=10*sum+(temp-48);
}
}
if(input[0]=='-')
{
sum=-sum;
}
return sum;
}
void main()
{
string inputA;string inputB;
int A,B;
while(cin>>inputA>>inputB)
{
A=covert(inputA);
using namespace std;
//统计文件中的单词数目
int _tmain(int argc, _TCHAR* argv[])
{
//read
ifstream ifs("zxh.txt",ios::in);
char c;int wordNum=0;bool isSpace=true;
while(!ifs.eof())
{
c=ifs.get();
if(c==' '||c=='\n'||c=='\r'||c=='\t')
{
if(!isSpace)//上一个不是空白字符这一个是
{
isSpace=true;
wordNum++;
}
}
else
{
if(isSpace)//上一个是空白字符这一个不是
{
isSpace=false;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
/**
输入一个数组的值,求出各个值从小到大排序后的次序。
输入:输入的第一个数为数组的长度,后面的数为数组中的值,以空格分割
输出:各输入的值按从小到大排列的次序。
sampleinput:
B=covert(inputB);
cout<<A+B<<"\n";
}
}
/***
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。
是否AC的规则如下:
1. zoj能AC;
2.若字符串形式为xzojx,则也能AC,其中x可以是N个'o'或者为空;
3.若azbjc能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
{
if(x[i]>='0'&&x[i]<='9')
{
a[i]=x[i]-'0';
}
else if(x[i]>='A'&&x[i]<='Z')
{
a[i]=x[i]-'A'+10;
}
else if(x[i]>='a'&&x[i]<='z')
{
a[i]=x[i]-'a'+10;
}
}
unsigned aIndex1=0,aIndex2=0,bIndex=0;
struct treeNode
{
char data;
treeNode* lchild,*rchild;
};
treeNode* createTree()
{
char c;
cin>>c;
if(c=='0') return NULL;
treeNode * root=new treeNode();
root->data=c;
注意:仔细看可以发现z前面o的个数乘以z和j之间o的个数就是j之后的个数
***/
#include<iostream>
#include<string>
using namespace std;
bool isAllO(string str)
{
for(int i=0;i<int(str.length());i++)
int iyu=0;
while(aIndex1<xLen)
{
iyu=0;
aIndex2=aIndex1;
while(aIndex2<xLen)
{
a[aIndex2]+=iyu*m;
iyu=a[aIndex2]%n;
a[aIndex2]/=n;
if(aIndex2==aIndex1&&a[aIndex2]==0)
root->lchild=createTree();
root->rchild=createTree();
return root;
}
void opposingMidTraversห้องสมุดไป่ตู้(treeNode*root)
{
if(root==NULL) return;
if(root->rchild!=NULL)
}
}
void main()
{
string inputA;
while(cin>>inputA)
{
if(judge(inputA)) cout<<"Accepted\n";
else cout<<"Wrong Answer\n";
}
}
#include<iostream>
#include<string>
#include<fstream>
输入一:
16 10
F
输出一:
15
**/
int main(){
int m,n,i;
char x[100];
int a[100];
char b[100];
scanf("%d %d",&m,&n);
scanf("%s",&x);
unsigned xLen=strlen(x);
for(i=0;i<xLen;i++)
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
struct node
{
int data;
node* next;
};
void printList(node*head)//print
{
node * p=head->next;
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include<time.h>
/**
输入:两行
第一行:M和N
第二行:X
M和N是一个十进制数,M和N都在[2-36]之间,X是一个M进制数,X在[1-2*10^19]
输出:一行
第一行:现在要求你将M进制数X转换成N进制数输出
{
aIndex1++;
}
aIndex2++;
}
if(iyu>=0&&iyu<=9)
{
b[bIndex]=iyu+'0';
}
else
{
b[bIndex]=iyu-10+'a';
}
bIndex++;
}
b[bIndex]='\0';
strrev(b);
printf("%s\n",b);
return 0;
}
#include<string>
using namespace std;
int covert(string input)
{
int l=input.length();
long long sum=0;
char temp='0';
for (int i=0;i<l;i++)
{
temp=input[i];
if(temp>='0'&&temp<='9')
p=head;
for(int i=length;i>0;i--)
{
p=head;
for(int j=0;j<i-1;j++)
{
if(p->next->data>p->next->next->data)
{
n=p->next;
p->next=n->next;
n->next=n->next->next;
p->next->next=n;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
node* head=new node();
head->next=NULL;
node* n,*p=head;;
char c;
4
-3 75 12 -3
output:
1 3 2 1
**/
int exist(int arr[],int len,int elem)
{
for(int i=0;i<len;i++)
{
if(arr[i]==elem)
return i;
}
arr[len]=elem;
return -1;
}
int main(){
{
if(str[i]!='o')
return false;
}
return true;
}
bool judge(string input)
{
int firstZIdx=input.find("z"),lastJidx=input.find_last_of("j"),length=input.length();
int length=0;
while(cin>>c)//create
{
if(c=='0') break;
if(c<'0'||c>'9')
{
cout<<"输入非法字符!\n";
return 0;
}
n=new node();
n->data=c-48;
n->next=NULL;
p->next=n;
p=p->next;
int m;
cin>>m;
}
//输入一个数列以0位结束标志,建立二叉遍历数,并对其进行逆中序遍历,释放空间
//需要注意的是释放空间时候只用在每次递归释放root就ok不要重复释放root->lchild和root->rchild
#include<iostream>
using namespace std;
{
plen++;
}
}
for(i=1;i<plen;i++)
{
for(j=0;j<plen-i;j++)
{
if(num1[j]>num1[j+1])
{
temp=num1[j];
num1[j]=num1[j+1];
num1[j+1]=temp;
}
}
}
for(i=0;i<inputNum;i++)
{
if(i!=0)
}
}
if(c!=' '&&c!='\n'&&c!='\r'&&c!='\t'&&c!=-1) wordNum++;
ifs.close();
cout<<wordNum;
int a;
std::cin>>a;
return 0;
}
1.输入一个数列以0位结束标志,建立链式线性表,查找其中最大的数并输出删除释放节点,然后对剩余的进行排序,并输出释放节点
string front=input.substr(0,firstZIdx);
string rear=input.substr(lastJidx+1);
string middle=input.substr(firstZIdx+1,lastJidx-firstZIdx-1);
if(!isAllO(front)||!isAllO(rear)||middle.length()==0||!isAllO(middle)||(firstZIdx>length-1-lastJidx)){return false;}
if(front==rear&&middle=="o")
{
return true;
}
else
{
string newStr=input.erase(length-front.length());
newStr=newStr.erase(firstZIdx+1,1);
return judge(newStr);
}
p=p->next;
}
cout<<"The max num is :"<<max<<"\nAfter deleting it ,the list is:\n";
p=n->next;
n->next=n->next->next;
free(p);
length--;
printList(head);
//sort
int inputNum,i,j,plen,temp;
int nums[1000],num1[1000];
while(scanf("%d",&inputNum)!=EOF)
{
for(i=0,plen=0;i<inputNum;i++)
{
scanf("%d",&nums[i]);
if(exist(num1,plen,nums[i])==-1)
}
p=p->next;
}
}
printList(head);
//print and free
while(head->next!=NULL)
{
cout<<head->next->data<<" ";
p=head->next;
free(head);
head=p;
}
free(head);
cout<<endl;
printf(" ");
printf("%d",exist(num1,plen,nums[i])+1);
}
printf("\n");
}
return 0;
}
/***
给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号","隔开。
现在请计算A+B的结果,并以正常形式输出。
***/
#include<iostream>
length++;
}
printList(head);
//find max
int max=0;
n=p=head;//parent
while(p->next!=NULL)
{
if(p->next->data>max)
{
max=p->next->data;
n=p;//n point to the max's parent
{
sum=10*sum+(temp-48);
}
}
if(input[0]=='-')
{
sum=-sum;
}
return sum;
}
void main()
{
string inputA;string inputB;
int A,B;
while(cin>>inputA>>inputB)
{
A=covert(inputA);
using namespace std;
//统计文件中的单词数目
int _tmain(int argc, _TCHAR* argv[])
{
//read
ifstream ifs("zxh.txt",ios::in);
char c;int wordNum=0;bool isSpace=true;
while(!ifs.eof())
{
c=ifs.get();
if(c==' '||c=='\n'||c=='\r'||c=='\t')
{
if(!isSpace)//上一个不是空白字符这一个是
{
isSpace=true;
wordNum++;
}
}
else
{
if(isSpace)//上一个是空白字符这一个不是
{
isSpace=false;
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
/**
输入一个数组的值,求出各个值从小到大排序后的次序。
输入:输入的第一个数为数组的长度,后面的数为数组中的值,以空格分割
输出:各输入的值按从小到大排列的次序。
sampleinput:
B=covert(inputB);
cout<<A+B<<"\n";
}
}
/***
对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC。
是否AC的规则如下:
1. zoj能AC;
2.若字符串形式为xzojx,则也能AC,其中x可以是N个'o'或者为空;
3.若azbjc能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空;
{
if(x[i]>='0'&&x[i]<='9')
{
a[i]=x[i]-'0';
}
else if(x[i]>='A'&&x[i]<='Z')
{
a[i]=x[i]-'A'+10;
}
else if(x[i]>='a'&&x[i]<='z')
{
a[i]=x[i]-'a'+10;
}
}
unsigned aIndex1=0,aIndex2=0,bIndex=0;
struct treeNode
{
char data;
treeNode* lchild,*rchild;
};
treeNode* createTree()
{
char c;
cin>>c;
if(c=='0') return NULL;
treeNode * root=new treeNode();
root->data=c;
注意:仔细看可以发现z前面o的个数乘以z和j之间o的个数就是j之后的个数
***/
#include<iostream>
#include<string>
using namespace std;
bool isAllO(string str)
{
for(int i=0;i<int(str.length());i++)
int iyu=0;
while(aIndex1<xLen)
{
iyu=0;
aIndex2=aIndex1;
while(aIndex2<xLen)
{
a[aIndex2]+=iyu*m;
iyu=a[aIndex2]%n;
a[aIndex2]/=n;
if(aIndex2==aIndex1&&a[aIndex2]==0)
root->lchild=createTree();
root->rchild=createTree();
return root;
}
void opposingMidTraversห้องสมุดไป่ตู้(treeNode*root)
{
if(root==NULL) return;
if(root->rchild!=NULL)
}
}
void main()
{
string inputA;
while(cin>>inputA)
{
if(judge(inputA)) cout<<"Accepted\n";
else cout<<"Wrong Answer\n";
}
}
#include<iostream>
#include<string>
#include<fstream>
输入一:
16 10
F
输出一:
15
**/
int main(){
int m,n,i;
char x[100];
int a[100];
char b[100];
scanf("%d %d",&m,&n);
scanf("%s",&x);
unsigned xLen=strlen(x);
for(i=0;i<xLen;i++)
#include<iostream>
#include<string>
#include<fstream>
using namespace std;
struct node
{
int data;
node* next;
};
void printList(node*head)//print
{
node * p=head->next;
#include <stdio.h>
#include<stdlib.h>
#include <string.h>
#include<time.h>
/**
输入:两行
第一行:M和N
第二行:X
M和N是一个十进制数,M和N都在[2-36]之间,X是一个M进制数,X在[1-2*10^19]
输出:一行
第一行:现在要求你将M进制数X转换成N进制数输出
{
aIndex1++;
}
aIndex2++;
}
if(iyu>=0&&iyu<=9)
{
b[bIndex]=iyu+'0';
}
else
{
b[bIndex]=iyu-10+'a';
}
bIndex++;
}
b[bIndex]='\0';
strrev(b);
printf("%s\n",b);
return 0;
}
#include<string>
using namespace std;
int covert(string input)
{
int l=input.length();
long long sum=0;
char temp='0';
for (int i=0;i<l;i++)
{
temp=input[i];
if(temp>='0'&&temp<='9')
p=head;
for(int i=length;i>0;i--)
{
p=head;
for(int j=0;j<i-1;j++)
{
if(p->next->data>p->next->next->data)
{
n=p->next;
p->next=n->next;
n->next=n->next->next;
p->next->next=n;
while(p!=NULL)
{
cout<<p->data<<" ";
p=p->next;
}
cout<<endl;
}
int _tmain(int argc, _TCHAR* argv[])
{
node* head=new node();
head->next=NULL;
node* n,*p=head;;
char c;
4
-3 75 12 -3
output:
1 3 2 1
**/
int exist(int arr[],int len,int elem)
{
for(int i=0;i<len;i++)
{
if(arr[i]==elem)
return i;
}
arr[len]=elem;
return -1;
}
int main(){
{
if(str[i]!='o')
return false;
}
return true;
}
bool judge(string input)
{
int firstZIdx=input.find("z"),lastJidx=input.find_last_of("j"),length=input.length();
int length=0;
while(cin>>c)//create
{
if(c=='0') break;
if(c<'0'||c>'9')
{
cout<<"输入非法字符!\n";
return 0;
}
n=new node();
n->data=c-48;
n->next=NULL;
p->next=n;
p=p->next;
int m;
cin>>m;
}
//输入一个数列以0位结束标志,建立二叉遍历数,并对其进行逆中序遍历,释放空间
//需要注意的是释放空间时候只用在每次递归释放root就ok不要重复释放root->lchild和root->rchild
#include<iostream>
using namespace std;
{
plen++;
}
}
for(i=1;i<plen;i++)
{
for(j=0;j<plen-i;j++)
{
if(num1[j]>num1[j+1])
{
temp=num1[j];
num1[j]=num1[j+1];
num1[j+1]=temp;
}
}
}
for(i=0;i<inputNum;i++)
{
if(i!=0)