1300 - C语言程序设计教程(第三版)课后习题11.8
时间限制 : 1 秒
内存限制 : 128 MB
已有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
C语言解答
#include<stdio.h> void main() { int m,n,i,j,a[100],b[100],temp; scanf("%d%d",&n,&m); for(i=0;i<m+n;i++) { scanf("%d%d",&a[i],&b[i]); } for(i=0;i<m+n;i++) { for(j=i+1;j<m+n;j++) { if(a[i]>a[j]) { temp=a[i],a[i]=a[j],a[j]=temp; temp=b[i],b[i]=b[j],b[j]=temp; } } } for(i=0;i<m+n;i++) { printf("%d %d\n",a[i],b[i]); } }
C++解答
#include<stdio.h> #include<stdlib.h> struct student { int id; int sore; }; int cmp(const void *a,const void *b) { student *sa=(student *)a; student *sb=(student *)b; return (*sa).id-(*sb).id; } int main() { student stu[1000]; int i,a,b; scanf("%d%d",&a,&b); for(i=0;i<a+b;i++) scanf("%d%d",&stu[i].id,&stu[i].sore); qsort(stu,a+b,sizeof(student),cmp); for(i=0;i<a+b;i++) printf("%d %d\n",stu[i].id,stu[i].sore); return 0; }
Java解答
import java.util.Collections; import java.util.LinkedList; 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) { List<Stu> list1 = new LinkedList<Stu>() ; List<Stu> list2 = new LinkedList<Stu>() ; int N = s.nextInt() ; int M = s.nextInt() ; for (int i = 0; i < N; i++) { int num = s.nextInt() ; int score = s.nextInt() ; Stu s = new Stu() ; s.num = num ; s.score = score ; list1.add(s) ; } for (int i = 0; i < M; i++) { int num = s.nextInt() ; int score = s.nextInt() ; Stu s = new Stu() ; s.num = num ; s.score = score ; list2.add(s) ; } list1.addAll(list2) ; Collections.sort(list1); for (Stu stu : list1) { System.out.println(stu.num+" "+stu.score); } } } class Stu implements Comparable{ int num ; int score ; @Override public int compareTo(Object o) { Stu stu = (Stu) o ; if(num>stu.num){ return 1 ; }else if(num==stu.num){ return 0; }else return -1 ; } }