zoukankan      html  css  js  c++  java
  • 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输出也可行
  • 相关阅读:
    制作紧急启动光盘的内容
    开发短信发送程序的几则技巧
    Debugging WOW64
    SOS debug
    决定你高度的——是你对自己的要求(zt)
    Dialog Boxes
    Reference vs. Pointer
    DOCTYPE
    Win32 编程入门
    Assembly binding Configuration Files
  • 原文地址:https://www.cnblogs.com/a982961222/p/12393121.html
Copyright © 2011-2022 走看看