PAT1075-----链表元素分类 (25分)

1075 链表元素分类 (25分)

输入样例:

00100 9 10
23333 10 27777
00000 0 99999
00100 18 12309
68237 -6 23333
33218 -4 00000
48652 -2 -1
99999 5 68237
27777 11 48652
12309 7 33218
 

输出样例:

33218 -4 68237
68237 -6 48652
48652 -2 12309
12309 7 00000
00000 0 99999
99999 5 23333
23333 10 00100
00100 18 27777
27777 11 -1

思路:
1.用数组下标表示链表的编号分别记录1.该节点的值2.该节点的后继结点
2.根据三个条件遍历三次链表构建新的链表

首次通过代码:
 1 #include<stdio.h>
 2 void output(int a,int b,int c){
 3        int x=a;
 4    for(int i=0;i<3;i++){
 5        if(i==1) printf("%d ",b);
 6        else{
 7            if(i==2) x=c;
 8            if(x>=0&&x<10) printf("0000");
 9            else if(x>=10&&x<100) printf("000");
10            else if(x>=100&&x<1000) printf("00");
11            else if(x>=1000&&x<10000) printf("0");
12            printf("%d",x);
13            if(i==0) printf(" ");
14        }
15    }
16     }
17 int main(){
18     int value[100050];
19     int next[100050];
20     int next1[100050];
21     int begin,sum,k;
22     scanf("%d %d %d",&begin,&sum,&k);
23     for(int i=0;i<sum;i++){
24         int a,b,c;
25         scanf("%d %d %d",&a,&b,&c);
26         value[a]=b;
27         next[a]=c;
28     }
29     int i=begin;
30     int i1,begin1;
31     int flag=1;
32     while(1){ 
33           if(value[i]<0){
34                 if(flag){
35                     flag=0;
36                     i1=i;
37                     begin1=i;
38                 }
39                 else{
40                     next1[i1]=i;i1=i;
41                 }
42             }
43           i=next[i];
44           if(i==-1) break;
45         }
46         i=begin;
47     while(1){
48         if(value[i]>=0&&value[i]<=k) {
49             if(flag){
50                     flag=0;
51                     i1=i;
52                     begin1=i;
53                 }
54                 else{
55                     next1[i1]=i;i1=i;
56                 }
57         }
58           i=next[i];
59           if(i==-1) break;
60     }
61     i=begin;
62     while(1){
63         if(value[i]>k) {
64         if(flag){
65                     flag=0;
66                     i1=i;
67                     begin1=i;
68                 }
69                 else{
70                     next1[i1]=i;i1=i;
71                 }
72          }
73           i=next[i];
74           if(i==-1) break;
75     }
76     next1[i1]=-1;
77         i1=begin1;
78         while(1){
79             output(i1,value[i1],next1[i1]);
80             if(next1[i1]!=-1) printf("
"); 
81             i1=next1[i1];
82             if(i1==-1) break;
83         }
84     return 0;
85 }
View Code
卡主我的地方:output函数中输出x>=0&&x<10写成了x>=0&&x<9导致第五个测试点一直不能通过,用%05d输出也可行
原文地址:https://www.cnblogs.com/a982961222/p/12393121.html