「PAT乙级真题解析」Basic Level 1075 链表元素分类 (问题分析+完整步骤+伪代码描述+提交通过代码)
admin
2024-04-24 22:51:05
0

乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。

PAT (Basic Level) Practice 1075 链表元素分类

问题分析

  • 题设给定链表头节点地址, 总节点个数, 元素分类阈值, 要求按照指定的方式对链表元素进行分类排序。
  • 指定方式为:
    • 将元素的值按照"大于0", “大于等于0且小于等于给定阈值”, "大于给定阈值"分为三组;
    • 分组中的元素保持在原始链表中的相对顺序;
    • 最后按照指定格式输出分类排序后的各个节点信息。
  • 由于该题是通过输入校验, 所以如果在考试中, 为了追求更快获得正确解, 可以选择直接按照指定方式输出各个节点信息的方式。
  • 比如: 将各个链表元素按照连接顺序放入连续的数组中, 然后给定规则对数组元素进行排序, 最后直接按照要求输出。
  • 给定规则描述为: 两个元素处于同一取值区间时相对位置不变, 如果处于不同区间, 则按照数值大小递增排序。

完整描述步骤

  1. 获取输入: 链表头节点, 节点个数, 区间阈值
  2. 按照链表连接顺序, 将各个节点放入连续数组中, 并计算链表长度
  3. 自定义排序规则:
    • 如果两个元素都小于0, 则两个元素顺序不变;
    • 如果两个元素都大于等于0且小于等于给定阈值, 则两个元素顺序不变;
    • 如果两个元素都大于给定阈值, 则两个元素顺序不变;
    • 否则, 按照元素值递增顺序排列两个元素;
  4. 按照自定义规则对连续数组进行排序
  5. 按照排序后的数组顺序输出各个节点的地址, 数据以及节点所在位置的下一个位置的元素的地址:
    • 如果是最后一个元素, 则输出"{该元素的地址} {数据} -1"

伪代码描述

  1. get input: head, node_amount, threshold
  2. put linked list into array, and calcualte length of array
  3. define rule of array sorting:
    • if A < 0 and B < 0: not change order bewteen A and B;
    • if 0 <= A <= threshold and 0 <= B <= threshold: not change order bewteen A and B;
    • if A > threshold and B > threshold: not change order bewteen A and B;
    • else: sort A and B as value ascending
  4. sorted array by defined sorting rule
  5. for index in range(0, length(array)):
    • if index != length(array) - 1:
      • print(“{array[i].address} {array[i].data} {array[i+1].address}”);
    • else:
      • print(“{array[i].address} {array[i].data} -1”);

完整提交代码

/*
# 问题分析
题设给定链表头节点地址, 总节点个数, 元素分类阈值, 要求按照指定的方式对链表元素进行分类排序。
指定方式为: 将元素的值按照"大于0", "大于等于0且小于等于给定阈值", "大于给定阈值"分为三组, 分组中的元素保持在原始链表中的相对顺序, 最后按照指定格式输出分类排序后的各个节点信息。
由于该题是通过输入校验, 所以如果在考试中, 为了追求更快获得正确解, 可以选择直接按照指定方式输出各个节点信息的方式。
比如: 将各个链表元素按照连接顺序放入连续的数组中, 然后给定规则对数组元素进行排序, 最后直接按照要求输出。
给定规则描述为: 两个元素处于同一取值区间时相对位置不变, 如果处于不同区间, 则按照数值大小递增排序。# 完整描述步骤
1. 获取输入: 链表头节点, 节点个数, 区间阈值
2. 按照链表连接顺序, 将各个节点放入连续数组中, 并计算链表长度
3. 自定义排序规则:- 如果两个元素都小于0, 则两个元素顺序不变;- 如果两个元素都大于等于0且小于等于给定阈值, 则两个元素顺序不变;- 如果两个元素都大于给定阈值, 则两个元素顺序不变;- 否则, 按照元素值递增顺序排列两个元素;
4. 按照自定义规则对连续数组进行排序
5. 按照排序后的数组顺序输出各个节点的地址, 数据以及节点所在位置的下一个位置的元素的地址:- 如果是最后一个元素, 则输出"{该元素的地址} {数据} -1"# 伪代码描述
1. get input: head, node_amount, threshold
2. put linked list into array, and calcualte length of array
3. define rule of array sorting:- if A < 0 and B < 0: not change order bewteen A and B;- if 0 <= A <= threshold and 0 <= B <= threshold: not change order bewteen A and B;- if A > threshold and B > threshold: not change order bewteen A and B;- else: sort A and B as value ascending
4. sorted array by defined sorting rule
5. for index in range(0, length(array)):- if index != length(array) - 1:- print("{array[i].address} {array[i].data} {array[i+1].address}");- else:- print("{array[i].address} {array[i].data} -1");
*/# includetypedef struct node{int address;int data;int next;
} node;node nodes[100001];
int threshold;int cmp(const void* a, const void* b){node node_a = *(node*)a;node node_b = *(node*)b;int A = node_a.data;int B = node_b.data;if (A < 0 && B < 0){return 0;}if (A > threshold && B > threshold){return 0;}if (0 <= A && A <= threshold && 0 <= B && B <= threshold){return 0;}return A > B;
}int main(){int head, node_amount;scanf("%d %d %d", &head, &node_amount, &threshold);int address, data, next;for (int i = 0; i < node_amount; i++){scanf("%d %d %d", &address, &data, &next);nodes[address].address = address;nodes[address].data = data;nodes[address].next = next;}int valid_node_amount = 0;node valid_nodes[node_amount];int current_address = head;while (current_address != -1){valid_nodes[valid_node_amount] = nodes[current_address];valid_node_amount++;current_address = nodes[current_address].next;}qsort(valid_nodes, valid_node_amount, sizeof(node), cmp);for(int i = 0; i < valid_node_amount; i++){if (i == valid_node_amount-1){printf("%05d %d -1\n", valid_nodes[i].address, valid_nodes[i].data);} else {printf("%05d %d %05d\n", valid_nodes[i].address, valid_nodes[i].data, valid_nodes[i+1].address);}}return 0;
}

上一篇:关于虚函数

下一篇:web随想笔记(二)

相关内容

热门资讯

算命能不能改命 算命能不能改命算命的不能够改命,你没听说过有一句话吗,三分天注定,七分靠打拼,也就是说有三分就是靠天...
谁知道赛尔号怎么进入夜魔古堡 谁知道赛尔号怎么进入夜魔古堡登录赛尔号,打开左上角的航行日志,选择右侧栏第一个圣甲永夜,再点击图中间...
爱情公寓5里人人都爱吕小布是哪... 爱情公寓5里人人都爱吕小布是哪一集?爱情公寓5里人人都爱吕小布,是在第13集上。有好几集都有好像在3...
不败是什么意思? 不败是什么意思?包含成功和从未挑战两种意思
叔向见韩宣子中栾武子等人的事例... 叔向见韩宣子中栾武子等人的事例。分析刘禹锡和韩宣子为人的异同刘禹锡是一个洁身自好的人,韩宣子是一个清...
大自然故事 大自然故事天上下起鱼雨
你怎么看待一屋不扫何以扫天下? 你怎么看待一屋不扫何以扫天下?个人观点,这句话理解的意思就是,小事做不好还怎么能做成大事。一个人想要...
生物细胞治病是假的 生物细胞治病是假的当肿瘤存在时,身体的免疫功能受到抑制,此时无论用何种免疫治疗,都是没有意义的。所以...
写笑容的句子唯美 写笑容的句子唯美关于笑容的优美句子汇总如下1. 朋友,愿你开口常笑笑容真,等着幸福来敲门!2. 嘴角...
汽车撞了以后会散架爆炸吗 汽车撞了以后会散架爆炸吗汽车撞了以后会散架爆炸吗,一般来说汽车碰撞产生高温引起汽油燃烧才会导致爆炸。...
《风起云涌》新手演示视频攻略 《风起云涌》新手演示视频攻略《风起云涌》是一款即时战略类游戏,游戏的故事设定在荒芜人烟的星球,该星球...
立志奋进的励志名人名言 立志奋进的励志名人名言【 #励志名言# 导语】在学习、工作或生活中,大家都对那些经典的名言很是熟悉...
这是什么花 这是什么花蔷薇科蔷薇属的野蔷薇的变种——七姊妹,又名七姐妹
任达华和妻子的爱情生活,像不像... 任达华和妻子的爱情生活,像不像现实版的童话?像。因为他们是娱乐圈少有的甜蜜,将生活过了二人世界,所以...
求《恐龙大作战》的征文怎么写 求《恐龙大作战》的征文怎么写我还没学过写征文自己先观看,然后可以适当的在知网上找相关素材
求水印大的《衣冠禽兽》全文(包... 求水印大的《衣冠禽兽》全文(包括VIP)在 自由自在完结文库 中有。
北京怎样寻找故友? 北京怎样寻找故友?北京新街口居住过的张乃池女士,张秋生男士现在何处?... 北京新街口居住过的张乃...
长期获胜!为什么美女炒股总是赚... 长期获胜!为什么美女炒股总是赚钱  【前言】我经过多年的总结,发现在股票市场长期能获胜的股民之中,美...
摆动的小球 摆动的小球摆动的小球摆到与竖直呈60度夹角时速度为零,此刻球对绳有拉力吗?咋解释?这其实就是动量守恒...
有哪些名人以前是从消极走向成功... 有哪些名人以前是从消极走向成功的。故事又是怎么样的,他又是怎么想的?不多,一、两个就可以了高祖刘邦,...