VLAN 资源池(100~200 分档)

题目描述

现有一个 VLAN 资源池,描述格式为逗号分隔的若干段:连续的 VLAN 用 起始ID-结束ID 表示,单个 VLAN 直接写 ID。业务申请一个 VLAN:若池中存在,则将其移除并输出剩余资源池;若不存在,则原样输出资源池。

输出格式要求: 按升序排列,连续 ID 合并为 a-b,单个 ID 单独输出,逗号分隔。

示例

复制代码
输入:
1-5,8,10-14
4

输出:
1-3,5,8,10-14

输入:
20-21,5,8,10-14
10

输出:
5,8,11-14,20-21

思路

  • VLAN 范围只有 1~4094,直接开一个标记数组,把每段区间打上标记;
  • 将申请的 VLAN 标记清零(不存在则相当于没变);
  • 从小到大扫描,找连续段输出即可,天然完成排序与合并。

C 代码

复制代码
#include <stdio.h>
#include <string.h>

#define N 4096              /* VLAN ID 取值范围 1~4094 */

int inPool[N];              /* inPool[i]=1 表示 VLAN i 在池中 */

int main(void)
{
    char line[10005];
    int need;

    if (fgets(line, sizeof(line), stdin) == NULL) return 0;
    line[strcspn(line, "\r\n")] = '\0';        /* 去掉行尾换行符 */
    scanf("%d", &need);

    /* 1. 按逗号切分,解析每一段并打标记 */
    char *tok = strtok(line, ",");
    while (tok != NULL) {
        int a = 0, b = 0;
        if (sscanf(tok, "%d-%d", &a, &b) == 2) {   /* 形如 a-b */
            for (int i = a; i <= b && i < N; i++) inPool[i] = 1;
        } else {                                   /* 单个数字 */
            sscanf(tok, "%d", &a);
            if (a >= 0 && a < N) inPool[a] = 1;
        }
        tok = strtok(NULL, ",");
    }

    /* 2. 移除申请的 VLAN(不在池中则等于没变) */
    if (need >= 0 && need < N) inPool[need] = 0;

    /* 3. 从小到大扫描,输出连续段 */
    int first = 1;
    for (int i = 1; i < N; i++) {
        if (!inPool[i]) continue;
        int j = i;
        while (j + 1 < N && inPool[j + 1]) j++;    /* 找连续段终点 */
        if (!first) putchar(',');
        if (i == j) printf("%d", i);               /* 单个 ID */
        else        printf("%d-%d", i, j);         /* 连续区间 */
        first = 0;
        i = j;                                     /* 跳过整段 */
    }
    putchar('\n');
    return 0;
}
相关推荐
贝壳6901 分钟前
一个2026年2月才上传的库,凭什么敢碰2009年就有人写烂的题目
算法
贝壳69035 分钟前
同一道三亿位选型题,三个AI给了我三个答案,我把它们拉进同一台机器复跑
算法
岑梓铭3 小时前
《考研408数据结构》第八章(排序)复习笔记
数据结构·笔记
青少儿编程课堂3 小时前
蓝桥杯青少组图形化 + 全国青少年信息素养大赛 + 电子学会图形化考级:校园大富翁经营闯关解析
c++·python·算法·bfs·信息学竞赛
在所不辞兄3 小时前
为什么在新能源汽车电驱与热管理开发中,AI驱动的数字孪生和数据驱动仿真正在部分替代对物理台架与实车标定的依赖?
人工智能·深度学习·神经网络·算法·机器学习
I_belong_to_jesus14 小时前
C++关于分支预测的优化1
开发语言·c++·算法
Code_Solitude21 小时前
C语言动态内存 + 柔性数组 + 数组名退化
c语言·算法·柔性数组
上海潭龙东海科技有限公司21 小时前
客运站管控之动态孪生技术方案(新增一屏管控模块
数据仓库·人工智能·算法·重构·动态规划
YLCHUP1 天前
【思维&图论建模】题解:债权(debt)_图论_建模_思路转化_思维题目_C++算法竞赛
c++·笔记·算法·数学建模·贪心算法·深度优先·图论