实验吧 CTF 编程题(五)

十六:二叉树遍历

这算是比较老的一道题了,如果是做题,可以直接画图画出来,以前写过已知二叉树前序中序求后序的代码

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
#include 
#include
#include
#include
using namespace std;
struct Tree{
struct Tree *left;
struct Tree *right;
char num;
};
typedef struct Tree treenode;
void getit(char* inor,char* preor,int length){
if(0==length)
return;
Tree * newnode = new Tree;//分配空间
newnode->num=*preor;
int flag=0;
for(;flagnum;
return;
}
int main(){
char* preor="DBACEGF";
char* inor="ABCDEFG";
//printf ("%d",sizeof(preor));
getit(inor,preor,8);
printf("\n");
return 0;

}

实验吧 CTF 编程题(四)

十一:括号表达式

这道题要写,数都数得来,画画图或者模拟整个过程一定会出来结果,我们不妨看看能否找出规律。举个例子,P=4 5 6 6 6 6,而每个右括号所在的括号内包含的括号数为W=1 1 1 4 5 6。P中的每一个数可以代表的是一个右括号,则数字4,不用说,必然与前面一左括号匹配,即为,数字4与5之间两个右括号有(5-4)个左括号,而数字4与5之间没有其他数字也即没有其他右括号,则这个左括号必然是与数字5所代表的右括号匹配,则也为1,同理数字5与6也是这样,到了第二个数字6,其往前找到第一个数字6,中间没有左括号,则继续往前找到5,数字5与数字6中间有(6-5)个左括号,而两个数之间还有一个右括号,则不行,得继续往前,找到4,同理不行,前面没有数了,那么就看这个数字6(第二个的)在p中是第几个就好了,应该说是与找到合理的数字下表之差,往后依旧。则对于4 6 6 6 6 8 9 9 9 即为 1 1 2 4 5 1 1 3 9 转化为代码即为

1
2
3
4
5
6
7
import
a=[0,4,6,6,6,6,8,9,9,9]
for i in range(1,len(a)):
j=i-1
while(a[i]-a[j]<i-j):
j=j-1
print i-j,

实验吧 CTF 编程题(三)

六:循环

送分题,这里判断奇数偶数的时候我用了逻辑与,其实一个数是否为奇数还是偶数就是看二进制的最后一位

1
2
3
4
5
6
7
8
9
10
11
12
13
14
max=0
for a in range(900,10001):
n=a
num=0
while(n!=1):
num+=1
if(n&amp;1==0):
n=n/2
else:
n=3*n+1
if(num&gt;max):
max=num
#print max
print max

实验吧 CTF 编程题 (一)

我进过一些安全类的QQ群,发现挺多”小白“(当然我也是^^)遇到不懂得就一顿糊涂拿到群里来问,其实很多问题在网上就能找到,并且许多的刚入这个方向的伙伴们喜欢用工具,不喜欢了解其中道理,当然这可能需要一个过程,当时我也是这样,喜欢拿个御剑到处乱扫^^。不说了,说多了大家还以为我很牛呢。不管怎样,要想搞好安全,一定要会编程,这是当年教我入门的老师跟我说的一句语重心长的话!就拿实验吧的题目来写写吧。话说这个网站真的很好,题目质量很好,但是好像好久没更了,并且有些题出错了,不过每周四都会有老师开直播教一些简单基本实用的东西,免费的,很实在。题目链接http://www.shiyanbar.com/ctf/practice

一:百米

这道题很基础,速度要快,就是用代码呗

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
#coding=utf-8
import requests
from bs4 import BeautifulSoup
import urllib
def getit():
headers = {
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.80 Safari/537.36'
}
url=u'http://ctf5.shiyanbar.com/jia/index.php'
response=session.get(url,headers=headers)
a=response.text
b=BeautifulSoup(a,"html.parser")#beautfiulsoup解析
c=b.find("div",{"name":"my_expr"})
d=c.get_text()#提取出那个计算式
e=d.replace('x','*')#用正儿八经的*代替那个字母x
print e
print eval(e)#eval很好用,直接就算出来了
f=eval(e)
data={
"pass_key":f
}
h=session.post(url,data=data,headers=headers)#发包
print h.text#看结果
if __name__=='__main__':
with requests.Session() as session:#建立会话
getit()

python Django别人的轮子修改

最近突然想用python写一写微信公众号后台,说起微信挺那个啥的,公众号接口似乎必须占着80端口。不知道为毛线。扯远了,由于以前用JAVA写过微信公众号后台,当时的一些基本回复消息还有事件的处理都是有现成的轮子,这一部分都封装好了的,只要到时根据自己需要修改增加相应代码即可。我就想会不会有python写的这一方面轮子。果然有http://ningning.today/2015/02/21/python/django-python%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F%91%E4%B9%8B%E4%B8%80%EF%BC%8D%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C/,其实这些个轮子都是根据微信的开发文档设计而来的,写出来难度不大,只是要时间而已。然后我就用了这个轮子,就有了接下来的故事。

python-12306-查票

已经是暑期了,许多小伙伴们都已经回家,说到回家突然想到以前的12306查余票的python脚本不能用了,是官方的json变了,不管怎么变,其实我们要的信息都在那里面就好了,关键是如何提取出来。借助之前网上有的例子。我们首先得到城市站名与其对应得编号(这个网上有),关键是这条链接https://kyfw.12306.cn/otn/resources/js/framework/station_name.js?station_version=1.9006,然后正则匹配出来即可。接下来就是如何解析了,其实不要太多花里胡哨的功能,本来就是用来用的,不是好看的。拿自己本人为例找一找成都到南昌的: