华为OD机试 - 告警抑制(C & Python)

题目描述:

告警抑制,是指高优先级抑制低优先级告警的规则 。高优先级告警产生后,低优先级告警不再产生。请根据原始告警列表和告警抑制关系,给出实际产生的告警列表。

注意:1、不会出现循环抑制的情况。

            2、告警不会传递,比如 A>B,B>C 这种情况下A不会直接抑制C。  但被抑制的告警仍然可以抑制其他低优先级的告警。

输入描述:

第一行位数字N,表示告警抑制关系个数,0<=N<=120

接下来N行,每行是由空格分隔的两个告警ID,例如:id1 id2,表示id1抑制id2,告警ID的格式为大写字母+0个或者1个数字。 最后一行为告警产生列表,列表长度[1,100]。

输出描述:

真实产生的告警列表

输入举例1:

2

A B

B C

A B C D E

输出为:

A D E

说明A抑制了B,B抑制了C,最后实际告警为 A D E

输入举例2:

4

F G

C B

A G

A0 A

A B C D E

输出为:

A C D E

F抑制了G,C抑制了B,A抑制了G,A0抑制A。遍历告警产生列表,遍历到B,因为被C抑制了需要去掉。

解题思路:

1、记录告警抑制关系;

2、遍历告警产生列表,判断每个元素是否是id1,坐上标记位,记录label,形成列表。

3、再次遍历告警产生列表,对每个元素,遍历上条产生列表label的id2是否相等,如果不相等打印出来,相等就不打印。

C代码源码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_M   100
#define MAX_N   100
#define MAX_STR 10005

int main(){
    int i,j,num;
    scanf("%d\n",&num);
    char id1[MAX_M][MAX_N],id2[MAX_M][MAX_N];
    for(i = 0;i < num;i++){
        scanf("%s %s",id1[i],id2[i]);
    }
    //fgets会把换行符输入进入,如果采用scanf把换行符写掉
    scanf("\n");
    char str[MAX_M];
    fgets(str,10000,stdin);
    int len = strlen(str);
    //把最后一个换行符去掉
    str[len - 1] = '\0';
    //申请双指针内存,储存全部字符串.担心输入不止一个字符,例如用例2中A0
    char **alterlist = (char **)malloc(sizeof(char*)*MAX_M);
    int alter_cnt = 0;
    alterlist[alter_cnt] = (char *)malloc(sizeof(char)*MAX_N);
    alterlist[alter_cnt] = strtok(str," ");
    while(alterlist[alter_cnt] != NULL){
        alter_cnt++;
        alterlist[alter_cnt] = (char *)malloc(sizeof(char)*MAX_N);
        alterlist[alter_cnt] = strtok(NULL," ");
    }
    int arr[MAX_M] = {0};
    int arr_cnt = 0;
    //遍历告警列表中与id1是否相等,若相等,记录label,形成列表.
    for(i = 0;i < alter_cnt;i++){
        for(j = 0;j < num;j++){
            if(strcmp(alterlist[i],id1[j]) == 0){
                arr[arr_cnt++] = j;
            }
        }
    }
    //再次遍历告警列表,判断每个元素与遍历上一个形成label的id2是否相等,若不存在相等打印出来,若存在不打印.
    for(i = 0;i < alter_cnt;i++){
        int flag = 0;
        for(j = 0;j < arr_cnt;j++){
            if(strcmp(alterlist[i],id2[arr[j]]) == 0){
                //若相等,设置标志位为1
                flag = 1;
            }
        }
        //若没有相等,打印出来
        if(flag == 0){
            printf("%s ",alterlist[i]);
        }

    }
    // for(i = 0;i < alter_cnt;i++){
    //     free(alterlist[i]);
    // }
    free(alterlist);
}

Python代码

num = eval(input())
relations = [input().split() for _ in range(num)]
list = input().split()
#新建列表记录被抑制的ID
rec_list = []
def getresults():
    for i in list:
        for j in relations:
            if i == j[0]:
                rec_list.append(j[1])
    for i in rec_list:
        if i in list:
            list.remove(i)
    print(list)
getresults()

告警抑制华为od中,通过合理的设置和控制,抑制系统中出现的各种告警信息,以提高系统的稳定性和可靠性。 在华为od中,系统会生成大量的告警信息,包括硬件故障、软件错误、网络异常等各种异常情况。这些告警信息通常是通过系统监控和日志记录的方式,及时地通知运维人员,以便他们及时地发现问题并进行处理。然而,在一些场景下,系统可能会产生过多的告警信息,给运维人员带来了困扰。 为了解决这个问题,华为od引入了告警抑制制。该制通过分析告警信息的类型、级别和频率等,从而确定是否需要抑制某些告警信息的产生和通知。具体来说,系统会根据预先设定的规则,对告警信息进行处理,合并相同类型的告警、过滤重复的告警,或者根据告警级别进行屏蔽和通知延迟等操作。 告警抑制制的优势在于,它可以减少不必要的告警信息,避免运维人员因为信息过载而忽略重要的问题。同时,告警抑制制还可以提高系统的稳定性,降低误报率,减少因为大量告警信息导致的性能损耗。 然而,告警抑制制也存在一些挑战。首先,如何准确地判断哪些告警信息是不必要的,需要通过对系统的深入了解和经验的积累来进行分析和判断。其次,告警抑制制可能会导致一些重要的问题没有及时被发现和解决。因此,在应用告警抑制制的过程中,需要权衡利弊,确保系统的运行安全和稳定性。 总而言之,华为od中的告警抑制是一项重要的功能,通过合理设置和控制告警信息,可以提高系统的稳定性和可靠性,同时也需要根据实际情况进行权衡和调整,确保重要问题得到及时处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书书公子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值