摘要: 从字符串中提取数字并排序输出看到别人的讨论贴,也做了下。题目很简单,可以直接用标准库函数,也可以自已造轮子。标准库中能用到的只有:atoi / strtol系列,显然得用 strtol(有些库atoi就是用strtol实现的)在用strtol前,先要对不安全的strtol封装下。int str2i(const char str[], const char* &next, int base = 10){ return strtol(str, const_cast<char**>(&next), base);}可采用两种算法: 1 先忽略空白字符,然后直接调用str2i 阅读全文
posted @ 2011-03-31 23:23 flyinghearts 阅读(1871) 评论(0) 推荐(0) 编辑
摘要: //用点树模拟约瑟夫问题//N个人编号:0,1,2,...N-1,报数:1到M,报到M的出列//www.cnblogs.com/flyinghearts#include<cstdio>template<intN>structRound2k{enum{down=Round2k<N/2u>::down*2,up=down==N?down:2*down};};template<>structRound2k<1>{enum{down=1,up=1};};template<intM,typenameT=int>//区间[0,M)cl 阅读全文
posted @ 2011-03-31 23:19 flyinghearts 阅读(250) 评论(0) 推荐(0) 编辑
摘要: 思路: 先画一棵完全二叉树, 为节省空间,采用数组来实现。对这棵二叉树,叶子用于存放数据,节点用于统计叶子信息。通过下面的三种方法,进一步节省空间:1 节点只记录左子树叶子信息,右子树叶子信息通过当前节点和父节点等节点的值计算得出。 因而需要指定一个点,当作根节点的“父节点”,以便计算根节点右子树信息。 可以将根节点从1开始编号,对节点i,左孩子编号为2*i,右孩子编号为2*i+1,并用编号0记录整根树所有叶子的信息。2 对某些应用,叶子信息可以通过节点信息计算得出,因而不保存叶子信息,3 完全二叉树,边界要求为2^k,为了表示[0, n)这n个点,需要将n增加到2^k,实际上, 只要第n个叶 阅读全文
posted @ 2011-03-31 23:13 flyinghearts 阅读(1479) 评论(0) 推荐(0) 编辑