栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

ccf csp 2020年09月 第三题:点亮数字人生(python版)附多个测试用例

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ccf csp 2020年09月 第三题:点亮数字人生(python版)附多个测试用例

题目略 思路

非闭环电路:
遍历列表找到能输出的器件,遍历过程如下

NAND 2 O2 O3  #4,第三次遍历输出O1
NAND 2 I1 O4  #2,第二次遍历输出O2
NAND 2 I2 O4  #3,第二次遍历,输出O3
NAND 2 I1 I2  #1,第一次遍历输出O4,
NAND 2 O6 O7  #8,第五次遍历输出O5
NAND 2 O1 O8  #6,第四次遍历输出O6
NAND 2 I3 O8  #7,第四次遍历输出O7
NAND 2 O1 I3  #5,第三次遍历输出O8

闭环电路:
情况1:无全是输入的信号的情况
遍历全部无输出,则为闭环

NOR 2 O4 I2  
AND 2 O4 O6
XOR 2 O5 O1
NOT 1 O6
NAND 2 O2 O2
AND 2 I1 O3

情况2:有全是输入信号,但存在有闭环
遍历第一遍时有输出O1,遍历第二遍时无输出

AND 2 I1 I2
AND 2 O1 O3
AND 2 I3 O2
测试用例

输入样例1:

1
3 5
XOR 2 I1 I2
XOR 2 O1 I3
AND 2 O1 I3
AND 2 I1 I2
OR 2 O3 O4
4
0 1 1
1 0 1
1 1 1
0 0 0
2 5 2
2 5 2
2 5 2
2 5 2

输出样例1:

1 0
1 0
1 1
0 0

输入样例2:

1
2 6
NOR 2 O4 I2
AND 2 O4 O6
XOR 2 O5 O1
NOT 1 O6
NAND 2 O2 O2
AND 2 I1 O3
2
0 0
1 0
3 2 3 4
6 1 2 3 4 5 6

输出样例2:

LOOP

输入样例3:

1
3 9
AND 3 I1 I2 I3
OR 3 I1 I2 I3
AND 2 I1 I2
AND 2 I1 I3
AND 2 I2 I3
OR 2 O1 O7
AND 2 O2 O8
NOT 1 O9
OR 3 O3 O4 O5
8
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
2 6 9
2 6 9
2 6 9
2 6 9
2 6 9
2 6 9
2 6 9
2 6 9

输出样例3:

0 0
1 0
1 0
0 1
1 0
0 1
0 1
1 1

输入样例4:

1
3 8
NAND 2 O2 O3
NAND 2 I1 O4
NAND 2 I2 O4
NAND 2 I1 I2
NAND 2 O6 O7
NAND 2 O1 O8
NAND 2 I3 O8
NAND 2 O1 I3
8
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
1 5
1 5
1 5
1 5
1 5
1 5
1 5
1 5

输出样例4:

0
1
1
0
1
0
0
1

输入样例5:

1
3 3
AND 2 I1 I2
AND 2 O1 O3
AND 2 I3 O2
1
1 1 1
1 1

输出样例5:

LOOP
代码
def is_NOT(n):
    if(n==1):
        return 0
    return 1
def is_AND(args):
    if args.count(1)== len(args):
        return 1
    return 0
def is_OR(args):
    if(args.count(1)>=1):
        return 1
    return 0
def is_XOR(args):
    xor=args[0]
    for i in range(1,len(args)):
        xor=xor ^ args[i]
    return xor

def is_NAND(args):
    if args.count(1) == len(args):
        return 0
    return 1
def is_NOR(args):
    if (args.count(1) >= 1):
        return 0
    return 1

q=int(input())
while(q>0):
    q-=1
    n,m=map(int,input().split())
    in_list = []
    for i in range(m):
        in_list.append(list(map(str,input().split())))
    s=int(input())#输入S行
    s_list = []  #存储接下来输入的2s行
    for j in range(2*s):
        s_list.append(list(map(int, input().split())))
        if(j0):
                        disable_Out=0
                        in_cout+=1
                        if(in_cout==max):
                            in_cout=0
                        continue
                    if (in_list[in_cout][0] == "NOT"):
                        zip_out[in_cout + 1] = is_NOT(lis[0])
                    elif (in_list[in_cout][0] == "AND"):
                        zip_out[in_cout + 1] = is_AND(lis)
                    elif (in_list[in_cout][0] == "OR"):
                        zip_out[in_cout + 1] = is_OR(lis)
                    elif (in_list[in_cout][0] == "XOR"):
                        zip_out[in_cout + 1] = is_XOR(lis)
                    elif (in_list[in_cout][0] == "NAND"):
                        zip_out[in_cout + 1] = is_NAND(lis)
                    elif (in_list[in_cout][0] == "NOR"):
                        zip_out[in_cout + 1] = is_NOR(lis)
                    in_cout+=1
                    if(len(zip_out)==m):
                        break
                    elif(first_Disable_Out!=-1):
                        in_cout = first_Disable_Out
                        first_Disable_Out=-1
                    if(in_cout==max):
                        max-=1
            if (loop!=1):
                for jj in range(1,s_list[j][0]+1):
                    print(zip_out[s_list[j][jj]],end=" ")
                print()
            else:
                break
    if(loop==1):
        print("LOOP")
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/321985.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号