数据结构作业记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36667170/article/details/83034483

1.1两数求和


2.1字符串插入(10分)

题目内容: 有两个字符串str和substr,str和substr的字符个数不超过10^5,只包含大小写字母和数字。(字符个数不包括字符串结尾处的’\0’。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入格式:
输入数据只有一行,格式为
str substr
输出格式:
输出插入之后的字符串。
输入样例:

abcab eee

输出样例:

abceeeab

时间限制:500ms内存限制:32000kb
答案

#include<iostream>
using namespace std;
int main()
{
	string a,b;
	cin>>a>>b;
	int key=0;
	for(int i=1;i<a.length();i++)
	{
		if(a[i]>a[key])
			key=i;
	}
	for(int j=0;j<=key;j++)
	{
		cout<<a[j];
	}
	cout<<b;
	for(int j=key+1;j<a.length();j++)
	{
		cout<<a[j];
	}
	return 0;
 } 
2.2大整数乘法(10分)

题目内容: 求两个不超过200位的非负整数的积。
输入格式: 有两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出格式: 一行,即相乘后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
输入样例:

12345678900
98765432100

输出样例:

1219326311126352690000

时间限制:500ms内存限制:32000kb
答案:

#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;
int main()
{
   string a,b;
   cin>>a>>b;
   int n=a.length()+b.length();
   int *s=new int[n];
   for(int i=0;i<n;i++)
   {
   	s[i]=0;
   }
   cout<<endl;
   for(int i=0;i<a.length();i++)
   {
   	for(int j=0;j<b.length();j++)
   	{
   		s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
   	} 
   }
   for(int i=a.length()+b.length()-1;i>0;i--)
   {
   	if(s[i]>9)
   	{
   		s[i-1]+=s[i]/10;
   		s[i]%=10;
   	}
   }
   int c=0;
   for(int i=0;i<n;i++)
   {
   	if(s[i]==0)
   		c++;
   	else 	
   		break;
   }
   for(int i=c;i<n;i++)
   {
   	cout<<s[i];
   }
   if (c==n)
   {
   	cout<<0;
   }
   return 0;
}
2.3约瑟夫问题(10分)

题目内容: 有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。
输入格式: 输入包含两个整数,第一个是n,第二个是m (0 < m,n <=300)。
**输出格式:**输出包含一行,即最后猴王的编号。
输入样例:

18 2

输出样例:

5

时间限制:500ms内存限制:32000kb
答案: 前一个是带头结点的,后一个是不带头结点的。

#include<iostream>
using namespace std;
struct Node
{
	int data;
	Node *next;
};
void SetList(Node *head,int n)
{
	Node *tail=head;
	for (int i=0;i<n;i++)
	{
		Node *s=new Node;
		s->data=i+1;
		tail->next=s;
		tail=s;
	}
	tail->next=head;
}
void DelNode(Node *head,int m)
{
	Node *flag=head;
	while (head->next->next!=head)
	{
		for (int i=0;i<m-1;i++)
		{
			if(flag->next!=head)
				flag=flag->next;
			else
				flag=head->next;
		}
		Node *d=flag->next;
		if(d==head)
		{
			d=d->next;
			flag=flag->next;
		}
		flag->next=d->next;
		delete d;
	}
}
int main()
{
	int n,m;
	cin>>n>>m;
	Node *head=new Node;
	head->next=head;
	SetList(head,n);
	DelNode(head,m);
	cout<<head->next->data;
	return 0;
}
#include<iostream>
#include<string> 
using namespace std;
struct node 
{
	int data;
	node * next;
};
int  main ( )
{ 
	node *p=new node;
	node *head=p;
	int n,m;
	cin>>n>>m;
	for (int i=1;i<n;i++)
	{
		p->data=i;
		p->next=new node;
		p=p->next;
	}
	p->data=n;
	p->next=head;
	p=head;
	while(p->next!=p)
	{
		for (int i=0;i<m-2;i++)
		{
			p=p->next;
		}
		
		node *q=p->next;
		p->next=q->next;
		delete q;
		p=p->next;
	}
	cout<<p->data<<endl;
	return 0;
}

3.3密码翻译(10分)

题目内容: 在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。
输入格式:
第一行是字符串的数目n。
其余n行每行一个字符串。
输出格式:
输出每行字符串的加密字符串。
输入样例:

1
Hello! How are you!

输出样例:

Ifmmp! Ipx bsf zpv!

时间限制:500ms内存限制:32000kb
答案:

#include<iostream>
using namespace std;
int main()
{
	int n;
	cin>>n;
	getchar();
	string a;
	while(n!=0)
	{
		getline(cin,a);
		for(int i=0;i<a.length();i++)
		{
			if(a[i]>='a'&&a[i]<='z')
				a[i]='a'+(a[i]-'a'+1)%26;
			else if(a[i]>='A'&&a[i]<='Z')
				a[i]='A'+(a[i]-'A'+1)%26;
		}
		cout<<a<<endl;
		n--;
	}
	return 0;
 } 

猜你喜欢

转载自blog.csdn.net/qq_36667170/article/details/83034483