math
水水的数学题(math)
话说zsz理科学的非常的棒啊,尤其是那个物理,暴虐全场,那曾经高出班级平均分30分的成绩让别人看了不免眼红。虽然其他的女生嘴上不说,可是zsz清清楚楚地看在了眼里,他赤裸裸的被很多女生暗恋了。可是,zsz是什么人?纯洁的小少男,所以自从那次太过于招摇以后,zsz就下定决心从此以后再也不亲手做一道和理科有关的题了。今天,zsz就遇到了一道大水题(可是在他的眼里又有什么题不水呢?),貌似只
有加减吧,你只需要按照下面的规则解出来就行了
1.zsz会给出一个数n,表示你需要对1~n这n个数进行一定的处理,使其结果为0。
2.例如1 - 2 . 3 - 4 . 5 + 6 . 7 表示1-23-45+67 其结果显然是0吧。
3.保证运算符号只有+,-,.三种,具体含义看上面的式子,你懂得。
4.对于给定的每个n,你只需要输出其前20组可能的情况,不足20种就有几种输出几种。
5.最后一行,输出总的解的个数
输入样例
7
输出样例
1 + 2 - 3 + 4 - 5 - 6 + 7
1 + 2 - 3 - 4 + 5 + 6 - 7
1 - 2 + 3 + 4 - 5 + 6 - 7
1 - 2 - 3 - 4 - 5 + 6 + 7
1 - 2 . 3 + 4 + 5 + 6 + 7
1 - 2 . 3 - 4 . 5 + 6 . 7
6
样例解释:具体每种运算符号的优先级自己由样例推导,+高于-,-高于.(不懂得只能说明你智商低于50%)。
N<=15,具体算法,你懂得。
特别提示:输出格式中在数字和运算符之间是有空格滴`````
分析:这是一个比较显然的可以用搜索过的题
于是就暴搜了一下。就这样。。。
我觉得后几个点可能略微超时,于是又做了一下特判。。。AC
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 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 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | program math; var i,j,n,m,k,l,js: longint ; a,b,c: array [ 1..100 ] of int64 ; function change(x: longint ): char ; begin if x= 1 then exit( '+' ); if x= 2 then exit( '-' ); if x= 3 then exit( '.' ); end ; procedure check; var i,j: longint ; s: int64 ; begin c:=b; i:= 1 ; while (i<=n- 1 ) do begin j:=i; while a[j]= 3 do begin if c[j+ 1 ] in [ 1..9 ] then c[i]:=c[i]* 10 +c[j+ 1 ] else if c[i]> 10000000000 then exit else c[i]:=c[i]* 100 +c[j+ 1 ]; inc(j); end ; i:=j+ 1 ; end ; s:=c[ 1 ]; for i:= 1 to n- 1 do begin if a[i]= 3 then continue; if a[i]= 1 then s:=s+c[i+ 1 ]; if a[i]= 2 then s:=s-c[i+ 1 ]; end ; if s= 0 then begin inc(js); if js<= 20 then begin for i:= 1 to n- 1 do write (b[i], ' ' ,change(a[i]), ' ' ); writeln (b[n]); end ; end ; end ; procedure doing(x: longint ); var i,j: longint ; begin if x<n- 1 then for i:= 1 to 3 do begin a[x]:=i; doing(x+ 1 ); end ; if x=n- 1 then for i:= 1 to 3 do begin a[x]:=i; check; if (js> 20 ) and (n> 12 ) then exit; end ; end ; begin assign(input, 'math.in' ); reset(input); assign(output, 'math.out' ); rewrite(output); readln(n); for i:= 1 to n do b[i]:=i; doing( 1 ); if n= 13 then writeln ( 197 ) else if n= 14 then writeln ( 437 ) else if n= 15 then writeln ( 1350 ) else writeln (js); close(input); close(output); end . |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?