1274 - C语言11.10

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

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

题目输入

第一行有两个用空格隔开的整数n和m,分别表示a和b两个链表中的节点个数。保证n和m均不超过100。

之后的n行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
最后的m行每行有两个用空格隔开的整数,分别表示一个学生的学号和成绩。
输入保证所有的节点中学号各不相同。

题目输出

合并之后升序排列的链表,每行两个用空格隔开的整数,分别表示一个学生的学号和成绩。

输入/输出样例

输入格式

3 5
101 90
104 80
106 85
103 95
105 88
107 87
108 90
109 95

输出格式

101 90
103 95
104 80
105 88
106 85
107 87
108 90
109 95

C语言解答

#include<stdio.h>
int main()
{
    int asd,dsa,a[111],b[111],i,j,t,n;
    scanf("%d%d",&asd,&dsa);
    n=asd+dsa;
    for(i=0;i<n;i++)
    {
        scanf("%d%d",&a[i],&b[i]);
    }
    for(i=0;i<n;i++)
    {
        for(j=i;j<n;j++)
        {
            if(a[j]<a[i])
            {
                t=a[j];
                a[j]=a[i];
                a[i]=t;
                t=b[j];
                b[j]=b[i];
                b[i]=t;

            }
        }
    }
        for(i=0;i<n;i++)
        {
            printf("%d %d\n",a[i],b[i]);
        }
        return 0;
}

C++解答

#include <stdio.h>
#include <stdlib.h>
struct node {
	int num, score;
	struct node * next;
};
int main() {
	struct node *heada, *taila, *headb, *tailb, *head, *tail, *p;
	heada = taila = headb = tailb = NULL;
	int n, m, i;
	scanf("%d %d", &n, &m);
	/* 读入a链表中的n个学生信息 */
	for (i = 0;i < n;i++) {
		p = (struct node *)malloc(sizeof(struct node));
		scanf("%d %d", &p->num, &p->score);
		if (heada == NULL) {
			heada = taila = p;
		} else {
			taila->next = p;
			taila = p;
		}
	}
	taila->next = NULL;
	/* 读入b链表中的m个学生信息 */
	for (i = 0;i < m;i++) {
		p = (struct node *)malloc(sizeof(struct node));
		scanf("%d %d", &p->num, &p->score);
		if (headb == NULL) {
			headb = tailb = p;
		} else {
			tailb->next = p;
			tailb = p;
		}
	}
	tailb->next = NULL;
	/* 合并两个链表 */
	head = tail = NULL;
	while (heada != NULL && headb != NULL) {
		/* 令p指向当前a和b两个链表头中较小的一个 */
		if (heada->num < headb->num) {
			p = heada;
			heada = heada->next;
		} else {
			p = headb;
			headb = headb->next;
		}
		/* 将p指向的节点放到合并后的链表尾部 */
		if (head == NULL) {
			head = tail = p;
		} else {
			tail->next = p;
			tail = p;
		}
	}
	/* 将仍未合并完的链表合并 */
	while (heada != NULL) {
		if (head == NULL) {
			head = tail = heada;
		} else {
			tail->next = heada;
			tail = heada;
		}
		heada = heada->next;
	}
	while (headb != NULL) {
		if (head == NULL) {
			head = tail = headb;
		} else {
			tail->next = headb;
			tail = headb;
		}
		headb = headb->next;
	}
	if (tail != NULL)
		tail->next = NULL;
	/* 将合并后的链表进行输出 */
	p = head;
	while (p != NULL) {
		printf("%d %d\n", p->num, p->score);
		p = p->next;
	}
	return 0;
}

Java解答



import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;

public class Main {
   private static Scanner s = new Scanner(System.in) ;
   
   public static void main(String[] args) {
	    int a = s.nextInt() ;
	    int b = s.nextInt() ;
	    if(a>=0&&a<=100&&b>=0&&b<=100){
	    List<Student> A = new ArrayList<Student>() ;
//	    List<Student> temp = new ArrayList<Student>() ;
	    List<Student> B = new ArrayList<Student>() ;
	    
	    
	    
	    for (int i = 0; i < a; i++) {
	    	Student stu = new Student() ;
			int n = s.nextInt() ;
			int m = s.nextInt() ;
			
				stu.num = n ;
				stu.score = m ;
				A.add(stu) ;
			}
	    
        for (int i = 0; i < b; i++) {
        	Student stu = new Student() ;
			int n = s.nextInt() ;
			int m = s.nextInt() ;
				stu.num = n ;
				stu.score = m ;
				B.add(stu) ;
			}
        
        A.addAll(B) ;
        
        Collections.sort(A);
        for (Student student : A) {
			System.out.println(student.num+" "+student.score);
		}
//        for (Student student : A) {
//			temp.add(student) ;
//		}
//        for (Student student : temp) {
//			for (Student student2 : B) {
//				if(student2.num==student.num){
//					A.remove(student) ;
//				}
//			}
//		}
//        System.out.println(A.size());
//        for (Student student : A) {
//			System.out.println(student.num+" "+student.score);
//		}
}
}
	    }

class Student implements Comparable{
	int num ;
	int score ;
	@Override
	public int compareTo(Object o) {
        Student s = (Student)o ;
        if(this.num>s.num)
        	return 1 ;
        else if(this.num==s.num)
		return 0;
        else return -1 ;
	}
}