线性表练习

大数加减

Time Limit: 1000MS*

You are given two integernumbers X and Y.  Write a program to calculate X+Y and X-Y.

Input

The first line of the input file contains a single integer N, the number of test cases. The following N lines each contains two integers----X and Y   ( 0 < X,Y <=10100  ).

Outpt

Print the value of X+Y, X-Y on a separate line.

Sample input and output

 

In

out

3

 

555559  11111

566670   544448

9999999999  6

10000000005  9999999993

800005555  9966660000

10766665555  -9166654445

 

#include<iostream>
#include<cstring>
using namespace std;
int main(){
	int T,i,j,k,c,flag;
	char a[110],b[110],tmp[110];
	int add[100],sub[110];
	cin >> T;
	while( T-- ){
		flag=0;
		cin >> a >> b;
		if( strlen(a) < strlen(b) || strlen(a) == strlen(b) && strcmp( a , b ) < 0 )
		{   strcpy(tmp,a),strcpy(a,b),strcpy(b,tmp);  flag = 1;   }
		c = k = 0;
		for( i = strlen(a) - 1,j = strlen(b) -1; i >= 0 && j >= 0 ; i-- , j--)
		{
			add[k++] = (a[i] + b[j] - 96 + c) % 10;
			if( a[i] + b[j] - 96 + c >= 10) c = 1;
			else   c = 0;
		}
		for( ; i >= 0; i-- )
		{
			
			add[k++] = (a[i] - 48 + c) % 10 ;
			if(a[i] - 48 + c >= 10) c = 1;  
            else c = 0;
		}
		if(c)add[k++]=1;
		for(i = k - 1; i >= 0; i--)
			cout << add[i];
		cout << "   ";
		c = k = 0;
		for( i = strlen(a) - 1,j = strlen(b) - 1; i >= 0 && j >= 0 ; i-- , j--)
		{
			sub[k++] = (a[i] - b[j] + c + 10) % 10;
			if( a[i] - b[j] + c < 0) c = -1;
			else c = 0;
		}
		for( ; i >= 0; i-- )
		{
			sub[k++] = (a[i] - 48 + c + 10) % 10;
			if(a[i] - 48 + c < 0)c = -1;
			else c = 0;
		}
		if(flag)cout<<'-';
		for(i = k - 1; i >= 0; i--)if(sub[i])break;
		for(k = i; k>=0; k--)cout<<sub[k];
		cout << endl;
	}
	return 0;
}



2 艺术品

Dr.Kong设计了一件艺术品,该艺术品由N个构件堆叠而成,N个构件从高到低按层编号依次为1,2,……,N。艺术品展出后,引起了强烈的反映。Dr.Kong观察到,人们尤其对作品的高端部分评价甚多。

狂热的Dr.Kong一激动,对组成该艺术品的N个构件重新组合,比如:把第6层到第12层的构件搬下来,想一想,然后整体放到剩下构件的第7层下面;过一会儿,又把第2层到第9层的构件搬下来,整体放到剩下构件的第1层下面等等。于是,Dr.Kong在进行了连续若干次“搬来搬去”后,还是这N个构件,又诞生了一件新的艺术品。

编程:请输出新的艺术品最高十层构件的编号。

【标准输入】 

第一行: N K       表示构件的总数和“搬来搬去”的总次数

2~K+1行:A B C      表示要搬动的构件(即从第A层到第B层)整个放在第C层下面;如果C等于0,则要搬动的构件将放到最高层。

【标准输出】

由十行组成,分别为组成新艺术品的第一层到第十层构件的编号。

【约束条件】

1)   10≤N≤20000    1≤k≤1000

(2)   1≤A≤B≤N,      0≤C≤N-(B-A+1)

【 样  例 】

 

标准输入

标准输出

13 3

6 12 1

2 9 0

10 13 8

 

6

7

8

9

10

11

12

2

3

4

#include<iostream>
using namespace std;
#define max(a,b) a>b?a:b
struct good{
	
	int ID;
	good *next;
};

good  *link,*temp,*last,*top;
void change(int a,int b,int c)
{
	int m=max(max(a,b),c);
	good *A,*B,*C;
	last=link;
	for(int i=1;i<=m;i++)
	{
		if(i==a-1)A=last;
		if(i==b)B=last;
		if(i==c)C=last;
		last=last->next;

	}
	temp=A->next;
	A->next=B->next;
     B->next=C->next;
	 C->next=temp;
}
int main()
{
	int n,total,a,b,c;   cin>>n;
	
	link=temp=last=NULL;
    
	for(int i=0;i<n;i++)
				{
		temp=new good;
		temp->ID=i+1;
		if(link==NULL)
			top=link=last=temp;
		else
		{
			last->next=temp;
			last=temp;
		}
				}
	cin>>total;
	while(total--)
	{
		cin>>a>>b>>c;
		if(c!=0)
			change(a,b,c);
		else {
			good *A,*B;
			last=link;
			for(int i=1;i<=b;i++)
			{
				
				if(i==a-1)A=last;
				if(i==b)B=last;
				last=last->next;	
			}
			top=A->next;
			A->next=B->next;
			B->next=link;
		   link=top;
		}
	} 
	for(i=0;i<10;i++)
	{
		cout<<link->ID<<endl;
	link=link->next;
		
	}		
				return 0;
}



3Dr.Kong的机器人

Dr.Kong设计了一个可以前进或后退机器人,该机器人在每个位置i会得到一个移动步数的指令Ki (i=1,2…N),聪明的机器人自己会判断是要前进Ki步还是后退Ki步。

 

例如:给定指令序列(3 3 1 2 5),表示机器人在第1个位置时,可以前进3步到第4个位置,此时后退是不起作用的,出界;机器人在第2个位置时,可以前进3步到第5个位置,此时后退是不起作用的,出界;机器人在第3个位置时,可以前进1步到第4个位置,也可以后退1步到第2个位置等等。

 

你认为,对给定的两个位置A,B, 聪明的机器人从A位置走到B位置至少要判断几次?

 

【标准输入】

第一行: M      表示以下有M组测试数据(0<M<=8)

接下来每组有两行数据

头一行:N A B          ( 1≤ N≤ 50, 1≤A,B ≤N )

下一行: K1 K2…..Kn     ( 0<=Ki<=N )

【标准输出】

 

输出有M行,第i行为第i组测试数据的最少判断次数, 若无法到达,则输出-1。

 

【 样  例 】

标准输入

标准输出

2

5 1 5

3 3 1 2 5

8 5 3

1 2 1 5 3 1 1 1

3

-1

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
struct pos
{
    int x,step;
};
int main(){
    int visit[51];
    int M,N,s,e;
    queue<pos>p;
    pos tmp,tmp1;
	int a[51];
	cin >> M;
	while(M--){
		while(!p.empty())p.pop();
		memset(visit,0,sizeof(visit));
		cin >> N;
		cin >> s >> e;
		tmp.x = s;tmp.step = 0;
		p.push(tmp);
        for(int i = 1; i <= N; i++)
            cin >> a[i];
		while(!p.empty()){
            tmp = p.front();
            p.pop();
            visit[tmp.x] = 1;
            if(tmp.x == e){ cout << tmp.step << endl;  break; }
			tmp1.x = tmp.x + a[tmp.x];
			tmp1.step = tmp.step + 1;
			if(tmp1.x > N || visit[tmp1.x])   ;
            else	p.push(tmp1); 
			tmp1.x = tmp.x - a[tmp.x];
			tmp1.step = tmp.step + 1;
            if(tmp1.x < 1 || visit[tmp1.x])       ;
			else  p.push(tmp1);
		}
		if(!visit[e])
			cout << -1 << endl;
	}
	return 0;
	
}




4. 约瑟夫环问题:

设编号为1,2,3,……,n的n(n>0)个猴子按顺时针方向围坐一圈,每个猴子持有一个正整数密码。开始时任选一个正整数做为报数上限m,从第一个猴子开始顺时针方向自1起顺序报数,报到m时停止报数,报m的猴子出列,将它的密码作为新的m值,从它的下一个猴子开始重新从1报数。如此下去,直到所有猴子全部出列为止。令n最大值取30。要求设计一个程序模拟此过程,求出出列编号序列。

struct node   //结点结构

{

    int number; /* 人的序号 */

    int cipher; /* 密码 */

    struct node *next; /* 指向下一个节点的指针 */

};

#include<iostream>
using namespace std;
struct Monkey{
    int ID;
	int cipher;  //密码,暗号
    Monkey *next;
};
int main(){
	Monkey *link,*monkey,*lastmonkey;
    int total,num,count;
	cin >> total;
	    link = NULL;
	   for(int i = 0;i < total;i++){
		   monkey = new Monkey;
		   cin>>monkey->cipher;
		   monkey->ID = i+1;
		   if(link == NULL)
			   link = lastmonkey = monkey;
		   else{
			   lastmonkey->next = monkey;
			   lastmonkey = monkey;
		   }
		   lastmonkey->next = link;
	   }
	   num = link->cipher; 
	   count = 1;
	   while(link != NULL)  {     
		   
		   if(link->next == link){
			   cout << link->ID;
			   delete link;
			   break;
		   }
		   if(count == num-1){
			   
			   monkey = link->next;
			   
			   link->next = monkey->next;
			   
			   cout << monkey->ID <<endl;
			   
			   delete  monkey;
			   
			   count = 0;
			   num = link->next->cipher;
		   }
		   link = link->next;  count++;
		   
		   
	   }
	   
	   
	   return 0;
}


      约瑟夫环这个我写的有点坑,也就是不能删除头结点或者是下次重新报数到一而自己的密码就是一的猴子。 


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值