codeup7.3 偷懒导致的水题

版权声明:原创文章,转载请注明出处 https://blog.csdn.net/hza419763578/article/details/88541019

问题 B: C语言-链表排序

时间限制: 1 Sec  内存限制: 128 MB
提交: 146  解决: 114
[提交][状态][讨论版][命题人:外部导入]

题目描述

已有a、b两个链表,每个链表中的结点包括学号、成绩。要求把两个链表合并,按学号升序排列。

输入

第一行,a、b两个链表元素的数量N、M,用空格隔开。 接下来N行是a的数据 然后M行是b的数据 每行数据由学号和成绩两部分组成

输出

按照学号升序排列的数据

样例输入

2 3
5 100
6 89
3 82
4 95
2 10

样例输出

2 10
3 82
4 95
5 100
6 89
#include<iostream>
#include<algorithm>
using namespace std;

const int N=1e5+10;

struct Node
{
	int sno;
	int score;
}node[N];

bool cmp(Node n1,Node n2){
	return n1.sno<n2.sno;
}

int main(){
	int m,n;
	while(cin>>m>>n){
		for(int i=0;i<m+n;i++){
			cin>>node[i].sno>>node[i].score;
		}
		sort(node,node+m+n,cmp);
		for(int i=0;i<m+n;i++){
			cout<<node[i].sno<<" "<<node[i].score<<endl;
		}
	}
	return 0;
}

问题 C: 最快合并链表(线性表)

时间限制: 1 Sec  内存限制: 128 MB
提交: 110  解决: 91
[提交][状态][讨论版][命题人:外部导入]

题目描述

知L1、L2分别为两循环单链表的头结点指针,m,n分别为L1、L2表中数据结点个数。要求设计一算法,用最快速度将两表合并成一个带头结点的循环单链表。

输入

m=5

3 6 1 3 5

n=4.

7 10 8 4

输出

3 6 1 3 5 7 10 8 4

样例输入

7
3 5 1 3 4 6 0
5
5 4 8 9 5

样例输出

3 5 1 3 4 6 0 5 4 8 9 5
#include<iostream>
using namespace std;
int a[100000];
int main(){
	int m;
	while(cin>>m){
		int index=0;
		while(m--){
			cin>>a[index++];
		}
		cin>>m;
		while(m--){
			cin>>a[index++];
		}
		for(int i=0;i<index;i++){
			cout<<a[i]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

问题 D: 链表查找(线性表)

时间限制: 1 Sec  内存限制: 128 MB
提交: 117  解决: 84
[提交][状态][讨论版][命题人:外部导入]

题目描述

 线性表(a1,a2,a3,…,an)中元素递增有序且按顺序存储于计算机内。要求设计一算法完成:

(1) 用最少时间在表中查找数值为x的元素。

(2) 若找到将其与后继元素位置相交换。

(3) 若找不到将其插入表中并使表中元素仍递增有序。

输入

输入:x=3

输入长度:9

输入数据:2 3 5 7 12 15 17 23 45

输出

相同元素为:3

交换后的链表为:2 5 3 7 12 15 17 23 45

样例输入

4
9
2 3 5 7 12 15 17 23 45

样例输出

no
2 3 4 5 7 12 15 17 23 45 
#include<iostream>
#include <vector>
using namespace std;

int main(){
	vector<int> vi;
	int x,n,m;
	while(cin>>x){
		vi.clear();
		cin>>n;
		while(n--){
			cin>>m;
			vi.push_back(m);
		}
		int i;
		for(i=0;i<vi.size();i++){
			if(vi[i]==x){
				cout<<x<<endl;
				swap(vi[i],vi[i+1]);
				break;
			}else{
				if(x<vi[i]){
					cout<<"no\n";
					vi.insert(vi.begin()+i,x);
					break;
				}
			}
		}
		for(int i=0;i<vi.size();i++){
			cout<<vi[i]<<" ";
		}
		cout<<endl;
	}
	return 0;
}

问题 E: 算法2-24 单链表反转

时间限制: 10 Sec  内存限制: 128 MB
提交: 161  解决: 91
[提交][状态][讨论版][命题人:外部导入]

题目描述

根据一个整数序列构造一个单链表,然后将其反转。

例如:原单链表为 2 3 4 5 ,反转之后为5 4 3 2

输入

输入包括多组测试数据,每组测试数据占一行,第一个为大于等于0的整数n,表示该单链表的长度,后面跟着n个整数,表示链表的每一个元素。整数之间用空格隔开

输出

针对每组测试数据,输出包括两行,分别是反转前和反转后的链表元素,用空格隔开

如果链表为空,则只输出一行,list is empty

样例输入

5 1 2 3 4 5 
0

样例输出

1 2 3 4 5 
5 4 3 2 1 
list is empty
#include<iostream>
using namespace std;
int main(){
	int n;
	int a[100000];
	while(cin>>n){
		if(n==0){
			cout<<"list is empty\n";
		}else{
			for(int i=0;i<n;i++){
				cin>>a[i];
				cout<<a[i]<<" ";
			}
			cout<<endl;
			for(int i=n-1;i>=0;i--){
				cout<<a[i]<<" ";
			}
			cout<<endl;
		}
	}
	return 0;
}

问题 F: 算法2-25 有序单链表删除重复元素

时间限制: 30 Sec  内存限制: 128 MB
提交: 145  解决: 83
[提交][状态][讨论版][命题人:外部导入]

题目描述

根据一个递增的整数序列构造有序单链表,删除其中的重复元素

输入

输入包括多组测试数据,每组测试数据占一行,第一个为大于等于0的整数n,表示该单链表的长度,后面跟着n个整数,表示链表的每一个元素。整数之间用空格隔开

输出

针对每组测试数据,输出包括两行,分别是删除前和删除后的链表元素,用空格隔开

如果链表为空,则只输出一行,list is empty

样例输入

5 1 2 3 4 5
5 1 1 2 2 3
0

样例输出

1 2 3 4 5 
1 2 3 4 5 
1 1 2 2 3 
1 2 3 
list is empty
#include<iostream>
#include<set>
using namespace std;
int main(){
	set<int> se;
	int n;
	int a[100000];
	while(cin>>n){
		se.clear();
		if(n==0){
			cout<<"list is empty\n";
			continue;
		}
		for(int i=0;i<n;i++){
			cin>>a[i];
			se.insert(a[i]);
			cout<<a[i]<<" ";
		}
		cout<<endl;
		for(set<int>::iterator it=se.begin();it!=se.end();it++){
			cout<<*it<<" ";
		}
		cout<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hza419763578/article/details/88541019
7.3