本次的竞赛主要是最后一题,对于完全不懂珠算的人来说还是有点困难的,仅理解题目的意思就花了很多时间,最后侥幸拿了第一个前三。。。

本次竞赛分为编程题部分和非编程题部分,其中非编程题部分比较简单。

这道题我一开始的理解是,算盘可以记录计算的中间过程,同时可以辅助计算,这样就能充分利用人脑的计算能力,但是题目来源的那本书上好像不是这么理解的,chat-gpt也认为不对,那基本实锤了。

这道题应该没啥疑问

这个不知道得问度娘,关键词:机械计算机,1642

这道题答案有问题,后续官方给更正了。算是一道相对简单的心算题,关键是记住常见的2的n次方,如2^7=128, 2^10=1024等
由于人类长了十根手指,所以人类的计数最常用的数制就是十进制。 但是,计算机中最常用的进制是二进制,因为二进制可以用比较少的物理状态来表示。 可是二进制只有0和1两个数字,很容易写得很长,所以也经常使用八进制或十六进制。
八进制的数使用0到7八个数字来表示,逢八进一。 十六进制的数除了0到9这十个数字以外,还使用A到F这六个字母(A到F分别代表十进制的10到15)一共十六个符号来表示,逢十六进一。 请把输入的数字转换为十进制。 如果数字中只有0和1,那么就认为是二进制。 如果数字中只有0到7,那么就认为是八进制。 如果数字中有不止0到7,那么就认为是十六进制。 如果出现了0到9、A到F(不区分大小写)之外的字母,那么就请输出“NaN”
在python当中数制转换非常简单int(n, 2)即表示将n转换为二进制表示。另外就是需要判断当前数的进制,这个可以将数字转换为字符串,然后判断ASCII最大的字符所在区段,从而判断进制。
b = input()
a = '0123456789abcdefABCDEF'
t = all((x in a) for x in b ) #b中的全部字符在a中输出True,否则False
if not t:
print('NaN')
else:
c = max(list(ord(x) for x in b))
if c <= ord('1'):
print(int(b, 2))
elif ord('1') < c <= ord('7'):
print(int(b, 8))
elif ord('8') <= c <= ord('f'):
print(int(b, 16))
现代人做两个数的加减法运算,是非常简单的事情:只要在计算器上按出第一个数,再按一下“+”或“-”键,再按出第二个数,最后按一下“=”键,就能够看到运算的结果了。但古代人没有计算器,还好古代中国有算盘这种工具。 CSDN的zjg55543同学在博客里给出了珠算加减法用到的口诀表:珠心算口诀表_zjg555543的博客-CSDN博客。
请你尝试把根据输入数的加减运算生成相应的珠算指令序列,每个指令对应于一句或若干句口诀,并该口诀之前输出其所应用的位置和该口诀所涉及的拨珠次数。
个位记为位置0、十位记为位置1、百位记为位置2,以此类推。同样地,十分位记为位置-1,百分位记为位置-2,以此类推。
有的口诀只需要拨动一次上珠或下珠,如“一上一”和“五下五”等。有的则需要拨动一次上珠和一次下珠,如“六上六”、“九下九”、“三下五去二”和“八退一还五去三”(“进一”或“退一”是从相邻高位进一或退一,并不需要在该位执行这一口诀时实际拨珠)等。
最后,输出总拨珠次数。
分析:
个人觉得遇到这种复杂的问题,一定要先想清楚逻辑,然后转换为多个函数,想清楚每个函数的输入输出,然后再整合起来。
当然,在分析过程当中,如果有想不清楚的一定要用笔记录一下,在纸上推演。
回到这道题,首先要理解珠算口诀,各个数字代表的含义以及为什么要先下再去,为什么要先退再还,它们各自针对的是哪一位。
理解珠算口诀之后,再来分析一下:
代码:
import sys
s = []
ss = []
while True:
line = sys.stdin.readline()
if not line: break
s.append(line)
for item in s:
if item != '\n':
ss.append(item.strip())
# 以上可以作为一个有输入EOF的python代码
n = 0
def num2status (s:str):
# 将一个数字转换成一个字符list,便于后续分析
# "-13.2" -> [0,-2,-3,-1,0,0,0]
flag = s[0]=="-"
s = s.replace("-","")
a, b = (s+".").split(".")[:2]
s = a.rjust(8,"0") + b.ljust(3,"0")
r = [ -i if flag else i for i in map(int,s[::-1]) ]
return r
def toggleCnt(n1, n2):
'''对于某一位上,数字的变化输出需要拨动的次数
'''
if(max(n1,n2) < 5): return 1
elif(n1<5 and n2>=5): return 2
elif(n1>=5 and n2>=5): return 1
elif(n1>=5 and n2<5): return 2
dic1 = { #加法口令
1: ['一上一', '一下五去四', '一去九进一', ''],
2: ['二上二', '二下五去三', '二去八进一', ''],
3: ['三上三', '三下五去二', '三去七进一', ''],
4: ['四上四', '四下五去一', '四去六进一', ''],
5: ['五上五', '五上五', '五去五进一', ''],
6: ['六上六', '六上六', '六去四进一', '六上一去五进一'],
7: ['七上七', '七上七', '七去三进一', '七上二去五进一'],
8: ['八上八', '八上八', '八去二进一', '八上三去五进一'],
9: ['九上九', '九上九', '九去一进一', '九上四去五进一']
}
dic2 = { #减法口令
1: [ "一下一", "一上四去五", "一退一还九", "" ],
2: [ "二下二", "二上三去五", "二退一还八", "" ],
3: [ "三下三", "三上二去五", "三退一还七", "" ],
4: [ "四下四", "四上一去五", "四退一还六", "" ],
5: [ "五下五", "", "五退一还五", "" ],
6: [ "六下六", "", "六退一还四", "六退一还五去一" ],
7: [ "七下七", "", "七退一还三", "七退一还五去二" ],
8: [ "八下八", "", "八退一还二", "八退一还五去三" ],
9: [ "九下九", "", "九退一还一", "九退一还五去四" ],
}
def addOrSub(x, y):
'''根据当前数(x)和加数(y, 可正可负),来输出口令
'''
if y<0:
op='-'
y=-y
else:op='+'
if op == '-':
s = x-y
if s<0: #退位减
s += 10
z = -1
if y>5:
if x<=y-6:
q = dic2[y][2]
else:
q = dic2[y][3]
else:
q = dic2[y][2]
else:
z = 0
if x>=5:
q = dic2[y][1]
else:
q = dic2[y][0]
else:
s = (x+y)%10 #当前位结果
z = (x+y)//10 #进位
q = ''
if(z>0):
if(x<5):
q = dic1[y][2]
else:
q = dic1[y][3]
else:
if(s < 5):
q = dic1[y][0]
elif(s >= 5):
q = dic1[y][1]
return s,z,q # 位值 进位 口令
state = [0]*(3+8)
# 遍历每个字符串
for s in ss:
# 遍历字符串的每一位,从后往前
for idx in range(3+8):
b = num2status(s)[idx]
if b==0: continue
r = b
# 当有进位时,往前遍历
while r:
c, r, q = addOrSub(state[idx], r)
# 位置、拨动次数、口令
x = toggleCnt(state[idx],c)
n+=x
print (idx-3, toggleCnt(state[idx],c), q)
state[idx] = c
idx += 1
print(n)
addOrSub函数写得不够全面,对于很多情况考虑存在问题,于是想了一个最直接的办法,把所有情况直接列出来!然后再按照原位数字和加数来查找口令。代码如下:table = (
" - S1 S2 S3 S4 S5 S6 S7 S8 S9 T1H1 T1H2 T1H3 T1H4 T1H5 T1H6 T1H7 T1H8 T1H9 \n" # 0
" - S1 S2 S3 X5Q1 S5 S6 S7 S8 Q1J1 T1H1 T1H2 T1H3 T1H5Q1 T1H5 T1H6 T1H7 T1H8 X1 \n" # 1
" - S1 S2 X5Q2 X5Q1 S5 S6 S7 Q2J1 Q1J1 T1H1 T1H2 T1H5Q2 T1H5Q1 T1H5 T1H6 T1H7 X2 X1 \n" # 2
" - S1 X5Q3 X5Q2 X5Q1 S5 S6 Q3J1 Q2J1 Q1J1 T1H1 T1H5Q3 T1H5Q2 T1H5Q1 T1H5 T1H6 X3 X2 X1 \n" # 3
" - X5Q4 X5Q3 X5Q2 X5Q1 S5 Q4J1 Q3J1 Q2J1 Q1J1 T1H5Q4 T1H5Q3 T1H5Q2 T1H5Q1 T1H5 X4 X3 X2 X1 \n" # 4
" - S1 S2 S3 S4 Q5J1 S1Q5J1 S2Q5J1 S3Q5J1 S4Q5J1 T1H1 T1H2 T1H3 T1H4 X5 S1Q5 S2Q5 S3Q5 S4Q5 \n" # 5
" - S1 S2 S3 Q6J1 Q5J1 S1Q5J1 S2Q5J1 S3Q5J1 Q1J1 T1H1 T1H2 T1H3 X6 X5 S1Q5 S2Q5 S3Q5 X1 \n" # 6
" - S1 S2 Q7J1 Q6J1 Q5J1 S1Q5J1 S2Q5J1 Q2J1 Q1J1 T1H1 T1H2 X7 X6 X5 S1Q5 S2Q5 X2 X1 \n" # 7
" - S1 Q8J1 Q7J1 Q6J1 Q5J1 S1Q5J1 Q3J1 Q2J1 Q1J1 T1H1 X8 X7 X6 X5 S1Q5 X3 X2 X1 \n" # 8
" - Q9J1 Q8J1 Q7J1 Q6J1 Q5J1 Q4J1 Q3J1 Q2J1 Q1J1 X9 X8 X7 X6 X5 X4 X3 X2 X1 \n" # 9
# 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 -9 -8 -7 -6 -5 -4 -3 -2 -1
)
abbr = {
"0": "〇", "1": "一", "2": "二", "3": "三", "4": "四", "5": "五", "6": "六", "7": "七", "8": "八", "9": "九",
"S": "上", "X": "下", "Q": "去", "J": "进", "T": "退", "H": "还",
}
table = [ [ (str(abs(b))+j).translate(str.maketrans(abbr))
for b,j in zip(list(range(0,10))+list(range(-9,0)),i.split()) ]
for i in table.split("\n")[:-1] ]
def addOrSub (a:int, b:int):
cc = a + b
c = cc%10; r = 1 if cc>9 else -1 if cc<0 else 0; q = table[a][b]
return c, r, q
2022年山东省职业院校技能大赛高职组“信息安全管理与评估”赛项竞赛规程一、赛项名称赛项名称:信息安全管理与评估英文名称:InformationSecurityManagementandEvaluation赛项组别:高职组赛项归属:电子与信息大类二、竞赛目的(一)引领教学改革通过大赛引领专业教学改革,实现以赛促教、以赛促学、以赛促改的产教结合格局,提升专业培养服务社会和行业发展的能力,为国家信息安全行业培养选拔技术技能型人才。2022年信息安全管理与评估赛项延续历届赛项的竞赛内容,通过赛项检验参赛选手安全网络组建、按照等保要求加固网络系统、安全架构、渗透测试、攻防实战等技术能力,检验参赛队计划
目录类01背包问题,选or不选变种走方格类01背包问题,选or不选不同的子序列_牛客题霸_牛客网问题翻译: S有多少个不同的子串与T相同 S[1:m]中的子串与T[1:n]相同的个数 由S的前m个字符组成的子串与T的前n个字符相同的个数状态: 子状态:由S的前1,2,...,m个字符组成的子串与T的前1,2,...,n个字符相同的个数 F(i,j):S[1:i]中的子串与T[1:j]相同的个数状态递推: 在F(i,j)处需要考虑S[i]=T[j]和S[i]!=T[j]两种情况 当S[i]=T[j]
为学习贯彻党的二十大工作报告中关于加快发展数字经济、促进数字经济和实体经济深度融合的重要指示,不断推进数字化转型与金融科技创新,桂林银行联合全国大学生数学建模竞赛广西赛区组委会、广西应用数学中心(广西大学)共同主办2023年“桂林银行杯”数据建模大赛暨全国大学生数学建模竞赛广西赛区热身赛。本次大赛旨在向学科专业竞赛靠拢,鼓励大学生向创新型、应用型、复合型人才发展,更好地提升大学生的创新意识和金融科技能力,为数据分析与建模人才提供更广阔的发挥平台,为建设数字中国、数字广西提供新动能。赛道说明:赛道A:个人消费贷款申贷客户识别。此赛道面向本科及以下学历的高校在校生。赛道B:Z世代的信用卡消费行为分
目录一、试题描述1、任务2、基本功能要求3、发挥要求4、说明二、开发板介绍 三、所用器件:1一个超声波测距传感器2eeprom3电位器44*4矩阵键盘5蜂鸣器6led灯7步进电机8RTC实时时钟9所用芯片 四、主要思路一、试题描述1、任务 设计并制作汽车倒车防撞报警器。开机后,屏幕第一行显示“DCFZBJQ”,第二行显示“抽签号后4位”(如0207),并自下而上滚动,3秒后停止滚动。画出系统各组件连接图,并简要说明,画出键盘图并标注各键功能。画出全部程序流程图。2、基本功能要求 (1)应用超声波传感器实现距离采集,并在12864点阵屏上显示。利用实验桌面到房顶距离(
大家好,我是黄小黄!一名普通的软件工程在读学生。最近终于闲下来了一丢丢!借着休息之余,来写一篇年度总结散散心~与其说是年度总结,不如说是给大学生活与莽莽撞撞的自己一个交代叭!这些都是小标题~碎碎念1双非本科的我该何去何从?碎碎念2忙碌的大学生活,课外活动?绩点?竞赛?奖学金?:star:大一,懵懂摸索:star:大二,追赶,超越,竞赛初探碎碎念3缘起csdn,第一篇博客?良师益友?碎碎念4落魄,失意,怀疑,重整旗鼓写在最后碎碎念1双非本科的我该何去何从? 高考结束,我就知道这次多半是凉了。果然,高考成绩出来后,醒目的英语80分就告诉我,别说985了,211都擦不了边儿哦!说没有学历焦虑都是假
我有这个Controller.controller('ctrl',function($scope,$rootScope,$timeout,$alert,$location,$tooltip,$popover,BetSlipFactory,AccordionsFactory,AuthFactory,RiskWinCalculations){...});并且,由于jshint,我收到此错误:line10col44Thisfunctionhastoomanystatements.(41)那么,我应该怎么做才能避免呢? 最佳答案 这并不像@
📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨📨☁️☁️说在前面😪😪怎么说吧,这次比赛还是以遗憾而告终,即使已经做好了充足的准备,可依然会有许多意想不到的事情会发生…⛄️⛄️比赛过后我难过了很久,反思了很久,慢慢的我也调整好自己的心态,我知道现在能做的就是吸取经验教训,不能让类似的情况再次发生。人生多少带点遗憾💭💭💭💭个人经历在下半部分💭💭💭💭☁️☁️赛前回顾🐝🐝【刷题】从一月末开始我刷题的强度就明显的上升了,起初在力扣上刷题为主。就我而言,我觉得力扣上出的那些题目并不是要求你解决某些实际问题,而更倾向于是要求你掌握各种算法模型原理。当然,要解决各类实际应用的问题还得通过这些算法模型
我正在编写一个网络应用程序。传入的请求将首先通过中间件。目前,我添加了两个中间件session和security。遍历中间件后,它将执行请求的处理程序。session和安全中间件将在它们自己的goroutine中执行。当我测试时,我有很多数据竞争,特别是在中间件部分WARNING:DATARACEWritebygoroutine18:runtime.mapassign1()c:/go/src/runtime/hashmap.go:383+0x0net/textproto.MIMEHeader.Set()c:/go/src/net/textproto/header.go:22+0xf4n
我有一个jobWorker应该处理作业,在这个worker中有数据库读写、日志文件、接收api和一些数据计算。varmystructstrcut{}funcworker(v){Getdatafromdatabase...Updatedatabasestatus...useByWorker()...Dosomecomputing...ReceiveAPI...Writelogfile}funcuseByWorker(){mystruct={1,2,3}}这是我运行go-worker的主要功能。funcmain(){varwgsync.WaitGroupdata:=[][]string{}
目录普通位置式PID控制 模糊PID控制区间划分模糊化清晰化改进模糊PID的MATLAB代码模糊PID的m测试使用文件,可一步步运行了解详细过程模糊PID的主函数和功能函数matlab代码模糊PID的使用和调参技巧普通位置式PID控制PID控制分为比例,微分,积分三项,其公式如下:U(t)=Kp∗err(t)+Kd∗[err(t)−err(t−1)]+Ki∗∑err(t) PID控制的比例环节为P,P越大参数的比例作用越明显,响应更快,消除误差的能力越强,但是系统的惯性也越强。比例太大时会造成系统的震荡,使系统不稳定,造成超调。PID控制的微分环节为D,D能够反映偏差的变化趋势,对超调进行预防