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("\n");
81             i1=next1[i1];
82             if(i1==-1) break;
83         }
84     return 0;
85 }

卡主我的地方:output函数中输出x>=0&&x<10写成了x>=0&&x<9导致第五个测试点一直不能通过,用%05d输出也可行

原文地址:https://www.cnblogs.com/a982961222/p/12393121.html

时间: 2024-08-28 19:32:52

PAT1075-----链表元素分类 (25分)的相关文章

PAT Basic 1075 链表元素分类 (25 分)

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11. 输入格式: 每个输入包含一个测试用例.每个测试用例第 1 行给出:第 1 个结点的地址:结点总个数,即正整数N (≤):以及正整数K (≤).结点的地址是 5 位非负整数,

1075. 链表元素分类(25)

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而[0, K]区间内的元素都排在大于K的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K为10,则输出应该为 -4→-6→-2→7→0→5→10→18→11. 输入格式: 每个输入包含1个测试用例.每个测试用例第1行给出:第1个结点的地址:结点总个数,即正整数N (<= 105):以及正整数K (<=1000).结点的地址是5位非负整数,N

1075 链表元素分类 (25 分)

给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11. 输入格式: 每个输入包含一个测试用例.每个测试用例第 1 行给出:第 1 个结点的地址:结点总个数,即正整数N (≤10?5??):以及正整数K (≤10?3??).结点的

PAT 1075 链表元素分类

https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880 给定一个单链表,请编写程序将链表元素进行分类排列,使得所有负值元素都排在非负值元素的前面,而 [0, K] 区间内的元素都排在大于 K 的元素前面.但每一类内部元素的顺序是不能改变的.例如:给定链表为 18→7→-4→0→5→-6→10→11→-2,K 为 10,则输出应该为 -4→-6→-2→7→0→5→10→18→11. 输入格式: 每个

(未AC)7-4 求指定层的元素个数 (25分)

输入一个嵌套列表,再输入层数,求该层的数字元素个数. 输入格式: 第一行输入列表 第二行输入层数 输出格式: 在一行中输出元素个数 输入样例: 在这里给出一组输入.例如: [1,2,[3,4,[5,6],7],8] 3 输出样例: 在这里给出相应的输出.例如: 2 1 #include<iostream> 2 #include<stack> 3 #include<string> 4 #include<cctype> 5 using namespace std

1075 链表元素分类

这是一道 模板题.直接背步骤,写代码.... #include<iostream> #include<algorithm> using namespace std; const int maxn = 100010; struct Node { //第一步:定义静态链表 int address,next,data; int order = 2*maxn;//第二步,初始化order } node[maxn]; bool cmp(const Node& a,const Node

链表_A1032 Sharing (25 分)

https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920 /* *链表的处理 *1.定义静态链表,结构体数组 *2.初始化falg为false *3.从链表首地址begin遍历,并标记有效结点 *4.对结点排序,有效结点true大于false */ #include<iostream> using namespace std; #include<cstdio> const int MA

L2-002 链表去重 (25 分)

错误代码,写了一个多小时还是错的,而且只有两分,悲伤逆流成河 #include <iostream> #include <map> #include <stdio.h> #include <math.h> #include <algorithm> using namespace std; map<int,int>mp; typedef struct List { int ard,data,nard; struct List *next

PAT 甲级 1052 Linked List Sorting (25 分)(数组模拟链表,没注意到不一定所有节点都在链表里)

1052 Linked List Sorting (25 分) A linked list consists of a series of structures, which are not necessarily adjacent in memory. We assume that each structure contains an integer key and a Next pointer to the next structure. Now given a linked list, y