西工大--人工智能程序设计noj--前60道

本文分享了西北工业大学NOJ平台上的前60道编程题解答过程及思路,涵盖基本语法、数据结构、算法应用等内容,适合初学者参考学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

西工大–人工智能程序设计noj–前60道

前言
截止到2022.12.10,本课程的noj61——90道,由于需要用到numpy、pandas、scipy等库,系统暂时没有这些库,无法评判,所以暂且分享一下前60道。前60道都已经AC(AC的截图我放在最后了)。有些题我小题大做了,程序写的很复杂,比如前10道;另外有些题的代码写的不太好,最近考试要紧,以后有时间再优化吧。如果有问题或者需要改进的地方,欢迎大家提供意见批评指正。
此文章仅供学习交流参考。本人也是初学python不久。

ps:前几道题没有截图,后面的都有。and图片有点大emm

1.Hello World

print("Hello World")

2.整数运算

a = int(input())
b = int(input())
c = input()
if (c == '+'):
    print("%d+%d=%d" % (a, b, a+b))
elif (c == '-'):
    # print("{}{}{}={}".format(a, c, b, a-b))
    print("%d-%d=%d" % (a, b, a-b))
elif (c == '*'):
    # print("{}{}{}={}".format(a, c, b, a*b))
    print("%d*%d=%d" % (a, b, a*b))
elif (c == '/'):
    if (b == 0):
        print("ERROR")
    else:
        # print("{}{}{}={}".format(a, c, b, a/b))
        print("%d/%d=%f" % (a, b, a/b))
elif (c == '//'):
    if (b == 0):
        print("ERROR")
    else:
        # print("{}{}{}={}".format(a, c, b, a//b))
        print("%d//%d=%d" % (a, b, a//b))
elif (c == '%'):
    if b == 0:
        print("ERROR")
    # print("{}{}{}={}".format(a, c, b, a % b))
    else:
        print("%d%%%d=%d" % (a, b, a % b))
elif (c == '**'):
    if a==0 and b == 0:
        print("ERROR")
    else:
    # print("{}{}{}={}".format(a, c, b, a**b))
        print("%d**%d=%d" % (a, b, a**b))
else:
    print("ERROR")

3.动态宽度

a = int(input())
b = int(input())
m = ''
while a > 0:
    m += str(a % 2)
    a = a//2
if len(m) > b:
    print(m[len(m)-b-1:-1])
else:
    for i in range(b-len(m)):
        print("0", end="")
    print(m[::-1])

4.二进制,八进制和十六进制

b = input()
d = input()
o = input()
h = input()
hhh = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8,
       '9': 9, 'a': 10, 'b': 11, 'c': 12, 'd': 13, 'e': 14, 'f': 15}
h_list = ['0', '1', '2', '3', '4', '5', '6',
          '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
bb = 0
dd = 0
oo = 0
hh = 0
for i in range(len(b)):
    bb += int(b[i]) * 2 ** (len(b)-i-1)
for i in range(len(d)):
    dd += int(d[i]) * 8 ** (len(d)-i-1)
oo = int(o)
for i in range(len(h)):
    hh += hhh[h[i]] * 16 ** (len(h)-i-1)
# print(bb,dd,oo,hh)
max_number = max(bb, dd, oo, hh)
# print(max_number)
a = max_number
m = ''
while a > 0:
    m += str(a % 2)
    a = a//2
print("0b"+m[::-1], end=",")
a = max_number
m = ''
while a > 0:
    m += str(a % 8)
    a = a//8
print("0o"+m[::-1], end=",")
print(max_number, end=",")
a = max_number
m = ''
while a > 0:
    m += h_list[a % 16]
    a = a//16
print("0x"+m[::-1])

5.回文数

这题我之前在别的地方写过,不过要求更多,这里就直接拿过来用了

def dp(sstr):
    lenth = len(sstr)
    l, r = 0, 0
    dp = [[False] * lenth for i in range(lenth)]
    for i in range(lenth - 1, -1, -1):
        for j in range(i, lenth):
            if sstr[i] == sstr[j]:
                if j - i <= 1:
                    dp[i][j] = True
                elif dp[i+1][j-1]:
                    dp[i][j] = True
            if dp[i][j] and j - i > r - l:
                l, r = i, j
    return sstr[l:r+1]


if __name__ == '__main__':
    num=int(input())
    str1=[]
    for i in range(num):
        str=input()
        str1.append(str)
    if num != 0:
        for i in range(num-1):
            if len(str1[i]) == len(dp(str1[i])):
                print("True",end=",")
            else: print("False",end=",")
        if len(str1[-1]) == len(dp(str1[-1])):
            print("True")
        else: print("False")

6.加密

a = int(input())
b = int(input())
c = int(input())
a = (a+b) % c
a = str(a)
if len(a) >= 4:
    for i in range(4):
        print(a[-i-1],end="")
else:
    print(a[::-1],end="")
    for i in range(4-len(a)):
        print("0",end="")

7.字符串处理

import sys

n = int(input())
slist = []
min_length = 10000
same_length = 0
for i in range(n):
    strlist = input()
    if (len(strlist) < min_length):
        min_length = len(strlist)
    slist.append(strlist)
if n != 0 and n!=1:
    for i in range(min_length):
        s = slist[0][i]
        same_length = i+1
        for j in range(n):
            if (slist[j][i] == s):
                continue
            else:
                same_length = i
                if same_length == 0:
                    print("None")
                    sys.exit()
                else:
                    for i in range(same_length):
                        print(slist[0][i], end="")
                    sys.exit()
    for i in range(same_length):
        print(slist[0][i], end="")
elif n == 1:
    print(slist[0])
else:
    print("None")

8.复数的和差积商

c1=complex(input())
c2=complex(input())
print(c1+c2,end=",")
print(c1-c2,end=",")
print(c1*c2,end=",")
print(c1/c2,end=",")
print(c1.conjugate(),end=",")
print(abs(c1))

复盘:

这题我考虑复杂了,没想到python提供了复数类型complex,在知道提供了complex类型后,我还想要自己实现共轭和模,本来是想找到实部和虚部,然后输出self.x2+self.y2,然后再用cmath.sqrt()方法取根号,结果取完根号它输出的并不是一个数(形式),而是复数的形式,比如3+4j的模是5,这样输出的结果并不是5而是5+0j,这样一种复数形式。查找资料后找到原因:

在网上找到了complex的源码:

#  用类实现复数的运算
 
class Complex:  # 定义Complex类
    def __init__(self, x, y):
        self.x = x
        self.y = y
 
    # 定义方法 加 ,可用魔法方法__add__()
    def __add__(self, other):
        return Complex(self.x + other.x, self.y + other.y)  # 返回两个值的相加结果
 
    # 定义方法 减 ,可用魔法方法__sub__()
    def __sub__(self, other):
        return Complex(self.x - other.x, self.y - other.y)  # 返回两个值的相减结果
 
    # 定义方法 乘 ,可用魔法方法__mul__()
    def __mul__(self, other):
        return Complex(self.x * other.x - self.y * other.y, other.x * self.y + self.x * other.y)  # 返回两个值的复数相乘结果
 
    # 定义方法 除 ,可用魔法方法__truediv__()
    def __truediv__(self, other):
        return Complex((self.x * other.x + self.y * other.y) / (other.x * other.x + other.y * other.y),
                       (other.x * self.y - self.x * other.y) / (other.x * other.x + other.y * other.y))  # 返回两个值的复数相除结果
 
    def __str__(self):
        return "%d + %di" % (self.x, self.y)
 
 
c1 = Complex(2, 4)  # 2 + 4i,传入实部2,虚部4
c2 = Complex(3, 1)  # 3 + i,传入实部3,虚部1
c3 = c1 + c2  # 将相加结果赋值给c3 ,这里由于加号,自动触动上面的魔法方法add,下同
c4 = c1 - c2  # 将相减结果赋值给c4
c5 = c1 * c2  # 将相乘结果赋值给c5
c6 = c1 / c2  # 将相除结果赋值给c6
print(c3)
print(c4)
print(c5)
print(c6)

重点在于25行的

​ def str(self):

​ return “%d + %di” % (self.x, self.y)

魔术方法,意思是所有类输出的结果的形式都要类似于这样"%d + %di"。

9.all-any

img

num=int(input())
a=[]
flag=0
for i in range(num):
    if flag==0:
        flag+=1
    else:
        print(",",end="")
    a=bin(int(input()))
    b=list(a[2:])
    for i in range(len(b)):
        b[i]=int(b[i])
    print(all(b),end="")

10.罗马数字

num=int(input())
flag=0
dist = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}

for i in range(num):
    if flag==0:
        flag+=1
    else:
        print(",",end="")
    st=input()
    result=0
    for j in range(len(st)):
        if j>0 and dist[st[j-1]] < dist[st[j]]:
                result=result+dist[st[j]]-2*dist[st[j-1]]
        else:
            result+=dist[st[j]]
    print(result,end="")

这题啥波一了,最后每次输出多了一个换行,忘记end=""了。。。。写了一个多小时。

11.搜索插入位置

num_list=input().split(",")
look_for=input()
if look_for in num_list:
    print(num_list.index(look_for))
else:
    for i in range(len(num_list)):
        if look_for > num_list[i]:
            continue
        else:
            print(i)
            break

12.重复数字

test_list=input().split(",")
for i in range(len(test_list)):
    test_list[i]=int(test_list[i])
data_dict={}
for i in test_list:
    if i not in data_dict.keys():
        data_dict[i]=1
    else:
        data_dict[i]+=1
# print(dict(sorted(data_dict.items(),key=lambda x: -x[1])))
print(dict(sorted(data_dict.items())))

这题学到的东西还是比较多的。

注释的那一行是按照values降序排序

参考一个很好的博客:http://t.csdn.cn/btqpV

13.百分制成绩转换五分制

score=int(input())
if score>100:
    print("data error!")
elif score>=90:
    print("A")
elif score>=80:
    print("B")
elif score>=70:
    print("C")
elif score>=60:
    print("D")
elif score>=0:
    print("E")
else:
    print("data error!")

这题写错了就把手剁了吧。

14.三角函数的使用

import math

x=int(input())
y=math.radians(x)
z=math.sin(y)+math.cos(y)-math.tan(y/4)*math.tan(y/4)
print("%.4f"%y)
print("%.4f"%z)

15.类型转换

def isfloat(str):
    s=str.split(".")
    if len(s)>2:
        return False
    else:
        for i in s:
            if not i.isdigit():
                return False
        return True

def str2float(str):
    s=str.split(".")
    return int(s[0])+int(s[1])/(10**len(s[1]))

num=0
num_str_list=input().split()
for i in range(len(num_str_list)):
    if num_str_list[i].isdigit():
        num_str_list[i]=int(num_str_list[i])
        num+=num_str_list[i]
    elif isfloat(num_str_list[i]):
        num_str_list[i]=str2float(num_str_list[i])
        num+=num_str_list[i]
print(num_str_list)
print(num)

16.反转元组

img

tuple1=tuple(int(i) for i in input().split())
tuple2=tuple(sorted(tuple1,reverse=True))
tuple3=tuple(i+j for i,j in zip(tuple1,tuple2))
print(tuple3)

17.水仙花数

img

for i in range(100,1000):
    if (i//100)**3+(i//10%10)**3+(i%10)**3 == i:
        print(i)

18.今年多少天

img

img

year = int(input())
if year % 400 == 0:
    print("366")
elif year % 100 == 0:
    print("365")
elif year % 4 == 0:
    print("366")
else:
    print("365")

19.用内置函数操作列表

imgimg

data_list=list(map(int,input().split()))
print(len(data_list),max(data_list),min(data_list),sum(data_list),sep=",")
dl=sorted([abs(i) for i in data_list])
print(dl)

20. 1-10的立方

img

a=[i**3 for i in range(1,11)]
print(a)

21.解方程

img

import math

num=int(input())
start=0
end=num
middle=(start+end)/2
while abs(middle-math.sqrt(num))>=0.0001:
    if middle**2>num:
        end=middle
        middle=(start+end)/2
    else:
        start=middle
        middle=(start+end)/2
print("%.4f"%middle)

22.列表中不相邻整数和的最大值

img

a=list(map(int, input().split()))
b=[0 for i in a]
c=[0 for i in a]
for i in range(len(b)):
    b[i]=max(a[:i+1])
for i in range(len(c)-2):
    c[i+2]=b[i]+a[i+2]
print(max(c))

23.字符统计

img

A_num=0
a_num=0
data_num=0
dl=input().split()
for i in range(len(dl)):
    for j in dl[i]:
        if 'A'<=j<='Z':
            A_num+=1
        elif 'a'<=j<='z':
            a_num+=1
        elif '0'<=j<='9':
            data_num+=1
print(A_num,a_num,data_num)

24.100~200素数累加求和

img

nsum=0
for i in range(100,201):
    for j in range(2,i):
        if i%j==0:
            break
        elif j==i-1:
            nsum+=i
        else:
            continue
print(nsum)

25.水上石阶

img

num=int(input())
arr=[0 for i in range(num+1)]
arr[0]=arr[1]=1
for i in range(num-1):
    arr[i+2]=arr[i]+arr[i+1]
print(arr[num])

26.神奇的计算

img

num=0
for x in range(1,10):
    for y in range(1,10):
        if y == x:
            continue
        for z in range(1,10):
            if z == x or z==y:
                continue
            for m in range(1,10):
                if m == x or m==y or m==z:
                    continue
                for n in range(1,10):
                    if n == x or n==y or n==z or n==m:
                        continue
                    if (x*10+y)*(z*100+m*10+n)==(x*100+m*10+y)*(z*10+n):
                        num+=1
print(num)

27.数字规律相加

imgimg

(这什么破规律??)

num=int(input())
nsum=0
for i in range(num):
    nsum=nsum+(num-i)*10**(i)
nsum+=num-1
print(nsum)

一次循环就能解决的事情干嘛要用两次循环(抖

28.逆时针原地逆转图像

img

num=int(input())
b=[]
for i in range(num):
    a=list(map(int, input().split()))
    b.append(a)
for i in range(num//2):
    for j in range(num//2):
        b[i][j],b[j][num-1-i],b[num-j-1][i],b[num-i-1][num-j-1]= \
            b[j][num-1-i],b[num-1-i][num-1-j],b[i][j],b[num-j-1][i]
if num%2 !=0:
    n=num//2
    for i in range(n):
        b[i][n],b[n][num-1-i],b[num-1-i][n],b[n][i]=\
            b[n][num-1-i],b[num-1-i][n],b[n][i],b[i][n]
for i in range(num):
    for j in range(num):
        print(b[i][j],end=" ")
    print("")

这题值得思考。

29.三个忍者

imgimg

arr = list(map(int, input().split()))
limit = list(map(int, input().split()))
num=0
for i in range(len(arr)):
    for j in range(i, len(arr)):
        if i != j:
            for k in range(j, len(arr)):
                if k != j and abs(arr[i]-arr[j])<=limit[0] and abs(arr[i]-arr[k])<=limit[1] \
                    and abs(arr[j]-arr[k])<=limit[2]:
                    num+=1
print(num)

30.长城最长凸起

imgimg

def judge_longest_length(arr):
    m=arr.index(max(arr))
    if m>0:
        for i in range(0,m):
            if arr[i]>=arr[i+1]:
                return 0
    elif m != len(arr)-1:
        for i in range(m,len(arr)-1):
            if arr[i]<=arr[i+1]:
                return 0
    return len(arr)

num = 0
arr = list(map(int, input().split()))
re = [[0 for i in range(len(arr))] for i in range(len(arr))]
for i in range(len(arr)-2):
    for j in range(i, len(arr)):
        if j - i < 2:
            continue
        else:
            a=judge_longest_length(arr[i:j])
            if a>num:
                num=a
print(num)

31.闭包函数实现计数器

imgimg

刚开始忘记题目要求是用闭包写了,第一次写的用的是yeild。

def counter():
    count=0
    while True:
        count+=1
        print(count)
        yield count
        
g=counter()
for i in range(5):
    next(g)

闭包:

32.“python”的编辑距离

imgimg

a=input()
b="python"
len_a=len(a)
len_b=len(b)
c=[[0 for i in range(len_b+1)] for j in range(len_a+1)]
for i in range(len(a)+1):
    for j in range(len(b)+1):
        if i == 0:
            c[i][j]=j
        elif j==0:
            c[i][j]=i
        else:
            c[i][j]=min(c[i-1][j]+1,c[i][j-1]+1,c[i-1][j-1]+ (0 if a[i-1]==b[j-1] else 1))
print(c[len_a][len_b])

33.找出目标在数组中的位置

img

34.n的平方和立方

img

def nnn(n):
    def pf_lf():
        print(n**2,n**3,sep="\n")
    return pf_lf

n=int(input())
a=nnn(n)# 环境
a()# n值

35.分发水果

imgimg

aa=list(map(int, input().split()))
num,m=aa[0],aa[1]
nn=[0 for i in range(num)]
n=0
while n*(n+1)/2<m:
    n=n+1
for i in range(n-1):
    nn[i%num]=nn[i%num]+i+1
nn[(n-1)%num]+=int(m-n*(n-1)/2)
for i in nn:
    print(i,end=" ")

36.sort和lambda函数

imgimg

num,t=map(int,input().split())
l=list(map(int, input().split()))
a=sorted(l, key=lambda x: abs(x-t))
# l.sort(key=lambda x: abs(x-t))
# print(l)
for i in range(num):
    print(a[i],end=" ")

37.使用lambda函数

imgimg

除法先转化成地板除

str1=input()
list_str1=list(str1)
b=0
for i in range(len(str1)):
    if str1[i]=='/':
        list_str1.insert(i+b,'/')
        b+=1
str2=[]
str2="".join(list_str1)
a=lambda s: eval(s)
print(a(str2))

38.斐波那契数

img

n=int(input())
if n==0:
    print(0)
elif n==1:
    print(1)
else:
    f_n2=0
    f_n1=1
    f_n=0
    for i in range(1,n):
        f_n=f_n2+f_n1
        f_n2=f_n1
        f_n1=f_n
    print(f_n)

39.数列求和

img

递归

def digui(n):
    if n==1:
        return 1
    else: 
        return n+digui(n-1)
n=int(input())
print(digui(n))

40.合并区间

img

注意需要排个序,最后的数组顺序必须是按顺序的。

num=int(input())
if num>0:
    edge_ran=list(map(int, input().split()))
    for i in range(num):
        for j in range(0,num-i):
            if j!=num-1:
                if edge_ran[2*j] > edge_ran[2*(j+1)]:
                    edge_ran[2*j],edge_ran[2*(j+1)]=edge_ran[2*(j+1)],edge_ran[2*j]
                    edge_ran[2*j+1],edge_ran[2*(j+1)+1]=edge_ran[2*(j+1)+1],edge_ran[2*j+1]
    # print(edge_ran)
    is_print=[1 for i in range(num)]
    for i in range(num):
        for j in range(i,num):
            if j!=i and edge_ran[2*i]<=edge_ran[2*j+1] and edge_ran[2*i+1]>=edge_ran[2*j]:
                is_print[i]=0
                edge_ran[2*j]=min(edge_ran[2*i],edge_ran[2*j])
                edge_ran[2*j+1]=max(edge_ran[2*j+1],edge_ran[2*i+1])
    for i in range(num):
        if is_print[i]:
            if i!=num-1:
                print(edge_ran[2*i],edge_ran[2*i+1],sep=" ",end=" ")
            else:
                print(edge_ran[2*i],edge_ran[2*i+1],sep=" ")

41.判断点是否在圆内

img

class circle():
    def __init__(self,x,y,r):
        self.x=x
        self.y=y
        self.r=r
    
    def is_in_circle(self,m,n):
        if (m-self.x)**2+(n-self.y)**2 <= self.r**2:
            print("1")
        else:
            print("-1")

m,n,x,y,r=map(int,input().split())
c=circle(x,y,r)
c.is_in_circle(m,n)

42.朋友圈

img

class UnionFindSet():
    def __init__(self,num):
        self.num=num
        self.fathermap={}
        self.size={}
        for node in range(num):
            self.fathermap[node]=node # 自己的父节点是自己
            self.size[node]=1 # 后代节点的数量初始化为1
    # 查找
    def search(self,node):
        father=self.fathermap[node]
        if node!=father:
            if father!=self.fathermap[father]:
                self.size[father]+=1
            father=self.search(father)
        self.fathermap[node]=father
        return father
    # 合并
    def union(self,a,b):
        if a is None or b is None:
            return
        a_root=self.search(a)
        b_root=self.search(b)
        if(a_root!=b_root):
            a_size=self.size[a_root]
            b_size=self.size[b_root]
            if a_size>b_size:
                self.fathermap[b_root]=a_root
                self.size[a_root]=a_size+b_size
            else:
                self.fathermap[a_root]=b_root
                self.size[b_root]=a_size+b_size


    # 多少个圈子
    def findnum(self):
        n=0
        for i in range(self.num):
            if self.fathermap[i]==i:
                n+=1
        print(n)
        # return n


num_node=int(input())
num_rela=int(input())
u1=UnionFindSet(num_node)
for i in range(num_rela):
    a,b=map(int,input().split())
    u1.union(a,b)
u1.findnum()

43.转换大小写

img

class include2func():
    def __init__(self):
        self.s=""


    def getString(self):
        self.s=input()


    def printString(self):
        print(self.s.upper())


a=include2func()
a.getString()
a.printString()

44.简单计算器

img

class zhengshu_calc():
    def __init__(self):
        self.list=[]


    def calc(self,list):
        self.list=list
        str1="".join(list)
        print(eval(str1))


strlist1=input().split()
a=zhengshu_calc()
a.calc(strlist1)

45.BMI指数计算

img

class person():
    def __init__(self,name,weight,height,gender):
        self.name=name
        self.weight=weight
        self.height=height
        self.gender=gender
        self.__bmi=0
    
    def read_bmi(self):
        if self.gender=="female":
            self.__bmi=int((self.height-70)*0.6)
        else:
            self.__bmi=int((self.height-80)*0.7)
        return self.__bmi

name,weight,height,gender=input().split()
weight=int(weight)
height=int(height)
p=person(name,weight,height,gender)
print(p.read_bmi())

46.计算阶乘

img

class bigint():
    def __init__(self,num):
        self.num=num
    
    def jiecheng(self):
        r=1
        for i in range(1,self.num+1):
            r=r*i
        return r
n=int(input())
a=bigint(n)
print(a.jiecheng())

47.实例计数

img

class person():
    count=0
    def __init__(self):
        person.count+=1
a=person()
b=person()
c=person()
d=person()
e=person()
print(person.count)

48.计算时间差

在这里插入图片描述
在这里插入图片描述

def this_year_is_run_year(thisyear):
    if thisyear % 400 == 0:
        return True
    elif thisyear % 100 == 0:
        return False
    elif thisyear % 4 == 0:
        return True
    else:
        return False


def one_day_is_which_day(year,month,day):
    run=this_year_is_run_year(year)
    if month==1:
        return day
    elif month==2:
        return 31+day
    elif month==3:
        return run+59+day
    elif month==4:
        return run+90+day
    elif month==5:
        return run+120+day
    elif month==6:
        return run+151+day
    elif month==7:
        return run+181+day
    elif month==8:
        return run+212+day
    elif month==9:
        return run+243+day
    elif month==10:
        return run+273+day
    elif month==11:
        return run+304+day
    elif month==12:
        return run+334+day


year1, month1, day1 = map(int, input().split())
year2, month2, day2 = map(int, input().split())
how_many_days=365+this_year_is_run_year(year1)-one_day_is_which_day(year1,month1,day1)+one_day_is_which_day(year2,month2,day2)
if year1==year2:
    how_many_days=how_many_days-365-this_year_is_run_year(year1)
elif year2-year1>1:
    for i in range(year1+1,year2):
        how_many_days+=this_year_is_run_year(i)+365
print(how_many_days)

49.计算重叠部分面积

img

class sequare():
    def __init__(self,x1,y1,x2,y2):
        self.x1=x1
        self.y1=y1
        self.x2=x2
        self.y2=y2
    
    def calc_same_s(self,bx1,by1,bx2,by2):
        if (bx1<=self.x1<=bx2 or bx1<=self.x2<=bx2 or self.x1<=bx1<=self.x2 or self.x1<=bx2<=self.x2) and \
            (by2<=self.y1<=by1 or by2<=self.y2<=by1 or self.y2<=by1<=self.y1 or self.y2<=by2<=self.y1):
            return (min(self.x2,bx2)-max(self.x1,bx1))*(min(self.y1,by1)-max(self.y2,by2))
        else: 
            return 0

ax1,ay1,ax2,ay2=map(int,input().split())
bx1,by1,bx2,by2=map(int,input().split())
a=sequare(ax1,ay1,ax2,ay2)
print(a.calc_same_s(bx1,by1,bx2,by2))

50.实现栈

img

class stack():
    def __init__(self):
        self.list=[]
    
    def push_stack(self,p):
        self.list.append(p)
    
    def pop_stack(self):
        self.list.pop()


    def print_stack(self):
        for i in self.list:
            print(i,end=" ")


s=stack()
while(True):
    a=input().split()
    # print()
    if a[0]=='0':
        break
    elif a[0]=='1':
        s.push_stack(a[1])
    else:
        s.pop_stack()
s.print_stack()

51.和为k的子数组

img

a=list(map(int,input().split()))
key=int(input())
numk=0
for i in range(len(a)):
    for j in range(i,len(a)):
        num=0
        for k in range(i,j+1):
            num+=a[k]
        if num==key:
            numk+=1
print(numk)

52.判断回文字符串

img

def is_huiwen(ll):
    for i in range(len(ll)):
        if ll[i]!=ll[len(ll)-i-1]:
            return False
    return True

def digui_huiwen(ll,delete_num):
    if is_huiwen(ll):
        return True
    elif delete_num>0:
        for i in range(len(ll)):
            p=ll.pop(i)
            if is_huiwen(ll):
                return True
            elif digui_huiwen(ll,delete_num-1):
                return True
            ll.insert(i,p)
    return False

a=input()
b=[i for i in a]
delete_num=int(input())
print(digui_huiwen(b,delete_num))

52.合并两个有序链表

img

53.集群数

img

import copy


row, col = map(int, input().split())
a = []
for i in range(row):
    b = list(map(int, input().split()))
    a.append(b)
c = copy.deepcopy(a)



def dfs(i, j):
    if a[i][j] == 1 and c[i][j] == -1:
        flag = 0
        # 更新c[i][j],如果它周围的有父节点,那么它也等于该点的父节点
        if i > 0 and a[i-1][j] == 1 and c[i-1][j] != -1:
            c[i][j] = c[i-1][j]
            flag = 1
        if i+1 < row and a[i+1][j] == 1 and c[i+1][j] != -1:
            c[i][j] = c[i+1][j]
            flag = 1
        if j > 0 and a[i][j-1] == 1 and c[i][j-1] != -1:
            c[i][j] = c[i][j-1]
            flag = 1
        if j+1 < col and a[i][j+1] == 1 and c[i][j+1] != -1:
            c[i][j] = c[i][j+1]
            flag = 1
        if flag == 0:
            c[i][j] = i*row+j
        # 更新上下左右
        if i > 0 and a[i-1][j] == 1 and c[i-1][j] == -1:
            dfs(i-1, j)
        if j+1 < col and a[i][j+1] == 1 and c[i][j+1] == -1:
            dfs(i, j+1)
        if i+1 < row and a[i+1][j] == 1 and c[i+1][j] == -1:
            dfs(i+1, j)
        if j > 0 and a[i][j-1] == 1 and c[i][j-1] == -1:
            dfs(i, j-1)
        


for i in range(row):
    for j in range(col):
        c[i][j] = -1


for i in range(row):
    for j in range(col):
        dfs(i, j)
d = []
for i in range(row):
    for j in range(col):
        if a[i][j] == 1 and c[i][j] not in d:
            d.append(c[i][j])
print(len(d))

55.有序数组去重

img

a=list(map(int, input().split()))
for i in a:
    if a.count(i) > 1:
        a.remove(i)
print(len(a))

56.数组中出现的奇异数

img

a=list(map(int, input().split()))
b=[]
for i in a:
    if a.count(i)==1:
        b.append(i)
b.sort()
print(b)

57.每日温度

img

a=list(map(int, input().split()))
for i in range(len(a)):
    for j in range(i,len(a)):
        if i!=j and a[j]>a[i]:
            print(j-i,end=" ")
            break
        if j == len(a)-1:
            print("0",end=" ")

58.数组实现循环队列

img

img

n=int(input())
b=[]
m=int(input())
for i in range(m):
    a=input().split()
    if a[0]=='1':
        if len(b)+1>n:
            print("False")
        else:
            b.append(int(a[1]))
            print("True")
    elif a[0]=='2':
        if len(b)==0:
            print("-1")
        else:
            print(b.pop(0))

59.最接近成功的三位同学

img

a=list(map(int, input().split()))
t=int(input())
num=0
for i in range(len(a)):
    for j in range(i,len(a)):
        if i!=j:
            for k in range(j,len(a)):
                if k!=j and a[i]+a[j]+a[k]<t:
                    num+=1
print(num)

60.环游世界

img

img

nextVisit = list(map(int, input().split()))
n = len(nextVisit)
numVisit = [0 for i in range(n)]
i = 0
visitNum = -1
while 0 in numVisit:
    numVisit[i] += 1
    if numVisit[i] % 2 == 1:
        i = nextVisit[i]
    else:
        i = (i + 1) % n
    visitNum += 1
visitNum = visitNum % (1e9+7)
print(int(visitNum))

AC截图:
在这里插入图片描述

西北工业大学NOJC程序设计习题答案(非本人制作,侵删) 1.“1“的传奇 2.A+B 3.A+BⅡ 4.AB 5.ACKERMAN 6.Arithmetic Progressions 7.Bee 8.Checksum algorithm 9.Coin Test 10.Dexter need help 11.Double 12.Easy problem 13.Favorite number 14.Graveyard 15.Hailstone 16.Hanoi Ⅱ 17.Houseboat 18.Music Composer 19.Redistribute wealth 20.Road trip 21.Scoring 22.Specialized Numbers 23.Sticks 24.Sum of Consecutive 25.Symmetric Sort 26.The Clock 27.The Ratio of gainers to losers 28.VOL大学乒乓球比赛 29.毕业设计论文打印 30.边沿与内芯的差 31.不会吧,又是A+B 32.不屈的小蜗 33.操场训练 34.插入链表节点 35.插入排序 36.插入字符 37.成绩表计算 38.成绩转换 39.出租车费 40.除法 41.创建与遍历职工链表 42.大数乘法 43.大数除法 44.大数加法 45.单词频次 46.迭代求根 47.多项式的猜想 48.二分查找 49.二分求根 50.发工资的日子 51.方差 52.分离单词 53.分数拆分 54.分数化小数 55.分数加减法 56.复数 57.高低交换 58.公园喷水器 59.韩信点兵 60.行程编码压缩算法 61.合并字符串 62.猴子分桃 63.火车站 64.获取指定二进制位 65.积分计算 66.级数和 67.计算A+B 68.计算PI 69.计算π 70.计算成绩 71.计算完全数 72.检测位图长宽 73.检查图像文件格式 74.奖金发放 75.阶乘合计 76.解不等式 77.精确幂乘 78.恐怖水母 79.快速排序 80.粒子裂变 81.链表动态增长或缩短 82.链表节点删除 83.两个整数之间所有的素数 84.路痴 85.冒泡排序 86.你会存钱吗 87.逆序整数 88.排列 89.排列分析 90.平均值函数 91.奇特的分数数列 92.求建筑高度 93.区间内素数 94.三点顺序 95.山迪的麻烦 96.删除字符 97.是该年的第几天 98.是该年的第几天? 99.数据加密 100.搜索字符 101.所有素数 102.探索合数世纪 103.特殊要求的字符串 104.特殊整数 105.完全数 106.王的对抗 107.危险的组合 108.文件比较 109.文章统计 110.五猴分桃 111.小型数据库 112.幸运儿 113.幸运数字”7“ 114.选择排序 115.寻找规律 116.循环移位 117.延伸的卡片 118.羊羊聚会 119.一维数组”赋值“ 120.一维数组”加法“ 121.勇闯天涯 122.右上角 123.右下角 124.圆及圆球等的相关计算 125.圆及圆球等相关计算 126.程序员添加行号 127.找出数字 128.找幸运数 129.找最大数 130.整数位数 131.重组字符串 132.子序列的和 133.子字符串替换 134.自然数立方的乐趣 135.字符串比较 136.字符串复制 137.字符串加密编码 138.字符串逆序 139.字符串排序 140.字符串替换 141.字符串左中右 142.组合数 143.最次方数 144.最大乘积 145.最大整数 146.最小整数 147.最长回文子串 148.左上角 149.左下角
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

codedog1

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

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

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

打赏作者

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

抵扣说明:

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

余额充值