求下一个排列数

LeetCode上遇到这么一个题:Next Permutation

意思就是给定一个序列,求下一个排列数。下一个排列数是指重排序列,使得下一个序列的字典序比当前序列要大,如果找不到,就返回最小字典序的那个序列。

要求是一步到位,不能分配多余的内存。

这个题貌似是要求实现C++的next_permutation函数,然后去瞄了一眼其实现:

阅读更多

整数除以2的幂与右移的关系

整数除法与右移运算

在C/C++中进行除以2的幂的运算,学过计组的同学,可能会知道更高效的是进行右移运算,右移几位,相当于除以2的几次幂。

C/C++中整数除法,去除小数部分,整数部分作为返回结果。

例如$6/4=1, -6/4=-1$

这里$4=2^2$,那么只要对一个数,右移2位,就相当于除以4了么?

容易用如下代码验证:

#include <stdio.h>
int main(void) {
    printf("%d\n%d\n", 6>>2, -6>>2);
    return 0;
}

阅读更多

谈谈localhost

刚刚发现一个有趣的现象,测试django项目的时候,这样启动服务器:

$ python3 ./manage.py runserver
...
Starting development server at http://127.0.0.1:8000/
...

然后想起laravel项目也是8000端口,就同时启动laravel项目:

$ php artisan serve
Laravel development server started on http://localhost:8000/

问题来了,2个端口一样,按理说应该会冲突啊,可是没有,打开浏览器,输入127.0.0.1:8000,看到的是django的项目。那么laravel项目哪去了,难道没启动成功,可是又没报错?

阅读更多

浅谈Java实现一个聊天软件

这是一个Java聊天系统(项目地址:https://github.com/netcan/Talk),作为Java实验课的内容,目前已基本完成,支持如下功能:

  • 群聊
  • 私聊
  • 消息提醒
  • 用户状态标记
  • 聊天记录保存
  • 表情支持

阅读更多

《The Linux Programming Interface》第四章文件IO通用模型练习

实现tee

The tee command reads its standard input until end-of-file, writing a copy of the input to standard output and to the file named in its command-line argument. (We show an example of the use of this command when we discuss FIFOs in Section 44.7.) Implement tee using I/O system calls. By default, tee overwrites any existing file with the given name. Implement the –a command-line option (tee –a file), which causes tee to append text to the end of a file if it already exists. (Refer to Appendix B for a description of the getopt() function, which can be used to parse command-line options.)

tee能够从标准输入读入,然后输出同样内容到标准输出,同时也会写到指定的文件中。如果文件存在那么就覆盖,若指定了-a选项,那么就追加内容到文件尾。

阅读更多

《The Linux Programming Interface》第三章系统概述练习

When using the Linux-specific reboot() system call to reboot the system, the second argument, magic2, must be specified as one of a set of magic numbers (e.g., LINUX_REBOOT_MAGIC2 ). What is the significance of these numbers? (Converting them to hexadecimal provides a clue.)

阅读更多

编译原理实验之LR(1)分析器设计

终于做完第三个实验了,代码地址:https://github.com/netcan/compilingTheory,项目地址:http://115.159.147.250:666/LR/第一次进入需要加载库,比较耗时,请耐心等待,效果图:
https://raw.githubusercontent.com/netcan/compilingTheory/master/LR.gif

阅读更多

编译原理实验之LL(1)语法分析器设计

编译原理第二个实验是LL(1)语法分析,这里我来写一下关于LL(1)的内容,虽然书上都有,但是总结一遍,应该印象更加深刻的,也有助于写代码。目前LL(1)实验已全部完成,项目地址:http://115.159.147.250:666/LL1/,代码地址:https://github.com/netcan/compilingTheory,效果图:
https://raw.githubusercontent.com/netcan/compilingTheory/master/ll1.gif

阅读更多