弄了弄qt,就知道为什么产品和程序员关系不好了。。 仿qq做的,感觉和qq差局还是很大,上图*.*   首先肯定是要把图片分成几部分,我分了4个框来处理这些(顺便吐槽一下Linux的画图软件,太难收了) 下一个就是要对每一部分进行相应的处理,写相应代码 //创建用户名,动图,等等 buttonfindpasswd = new QPushButton("找回密码"); buttonnewusr = new QPushButton("注册帐号"); buttonlogin = new QPushButton("登录"); texteditusername = new QLineEdit(); textedituserpasswd = new QLineEdit(); checkboxlogin = new QCheckBox("自动登录"); checkboxspass = new QCheckBox("记住密码") 继续阅读 >>


马艺诚 18/08/13 01:06:22
先说说动态规划吧,最重要的就是找转移方程(虽然我开始感觉自己没找,都是自己想的,但是回头看,只不过是脑子里找的,但是当时不认为那个是转移方程,多刷刷就会了) 背包问题这里就不讲了,网上找找就好啦 简单提一下优化,就是背包的d[i][j]可以优化为d[j],因为每一次都是递推,把所有的和所有累加的放进去,一个一维数组足矣。   讲完全背包之前,先讲一个完全背包退化版的问题,对理解完全背包很有帮助哦 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1284 这个题其实用暴力也是可以的,但是为了学动态规划,就得用动态规划的思想想想 假如只有1分硬币,就是从第一个递推到第n个,假如只有2分、3分同理,转移方程是d[j]  = d[j] + d[j - i]。 #include <stdio.h> int a[40000]; int ma 继续阅读 >>


马艺诚 18/08/12 21:35:18
看网络编程的时候,开始感觉挺难,函数太多了,慢慢,学的多了,入门了,我把经验分享一下   客户端的我就不讲了,我主要讲讲服务器端的 服务器端 首先调用socket创建一个套接字。 然后通过bind绑定。          socket只是创建了一个套接字,这个套接字将工作在哪个端口上,程序并没有固定。但服务器端的IP地址端口号一般是固定的,因此在服务器端的程序中,使用bind函数将一个套接字和某个端口绑定在一起,该函数一般只有服务器端的程序可以使用。 接着linsten监听。             由函数socket创建的套接字是主动套接字,这种套接字可以用来主动请求连接到某个服务器(通过connect)但作为服务器端的程序,通常在某个端口上监听等待来自客户端的连接请求。       之后调用accept就成功了 (附上服务器端代码) #include <stdio.h> #include <string.h> #include <stdlib. 继续阅读 >>


马艺诚 18/08/05 23:28:45
首先引用下《算法竞赛入门经典(第二版)》的一句话:“回溯法是初学者学习暴力破解法的第一个障碍,学习时间短则数天,长则数月甚至一年以上” 所以我在讲回溯法之前先讲几个例子,然后层层深入(一定要耐下心,慢慢看哦) 1.枚举排列 枚举1-10的所有排列(按字典序从小到大的顺序) 肯定是递归了,但是要怎么做呢? 是不是聪明的你已经想到了,就是每次把一个数放到标记数组中,如果有相同的数字就返回,没有就递归,等满了打印出来就成了。 int a[100] = { 0 }; //标记数组,记录这个数有没有被访问 int n; //枚举个数(从1开始到n) int sum[100]; //记录顺序 void dfs(int sn) //sn是记录到第几个数了 { if(sn == n) //因为这个是排列问题,不像其他递归一样多了或少了就退出了,等他们相等就直接ok。 { int i = 1; for(;i <= n;i++) printf(" 继续阅读 >>


马艺诚 18/08/05 21:38:51
废话不多说,就给看csdn的说两句 1.用lstat,因为用stat会链接过去,导致各种问题 2.latat参数里边写绝对路径,千万别写相对路径,(反正我的linux相对路径里的普通文件系统会认为是目录,然后进去) 作者:ghorge 发表于 2018/07/28 23:56:50 原文链接 https://blog.csdn.net/ghorge/article/details/81266907 阅读:102 继续阅读 >>


马艺诚 18/07/28 23:56:50
这几天看了看网络最基础的,写个博客留个纪念。。(可能比较枯燥,都是些概念,慢慢耐着头皮看吧,我也是这样过来的) 其实网络的本质就只是为交换数据的!!! 先讲讲网络结构 网络结构分为3层 1.网络边缘:(一般就是家用电脑,手机等等) 2.接入网络(物理介质):(就是说你是通过什么接入网络的,是无线,光纤还是电缆等等) 3.网络核心:(路由器):(通过网络核心来进行数据交换,qq就是这样的,不是说你俩连了同一wifi但是wifi没网就能发消息) 下面讲讲数据交换以及数据交换的3种方式 首先想到的交换肯定是这种交换(如下图),但是这种只试用于小的规模,规模   因为如果网络规模巨大,总连接数为指数增长(n^2链路问题了解一下^-^),所以人们引出了交换设备,故名思意,这个设备用于交换数据 (其实在真实生活中,交换设备可以不是一个两个,而是一个交换机群(俗称isp)) 接着讲讲交换的3种方式 1.电路交换          最常见的就是打电话,这个时候是不是只有你们两个人用一 继续阅读 >>


马艺诚 18/07/28 23:52:05
首先来引入一个例子:如何使用选择排序? 肯定是每一次遍历然后把大的放到最后面。(当然,前面也可以) 我感觉堆排序其实和选择差不多。 堆排序也是每次取出最大值,然后把最大值放后面   但是想学会堆排序,首先要知道什么是堆 #堆的定义 逻辑上:一个完全二叉树 物理上:借助向量实现 为什么能用一个向量来间接的弄一个完全二叉树呢? (你自己试试把这个完全二叉树按层次遍历,是不是就是这个向量了) 如图,因为完全二叉树中间没有空缺,都是连续的,所以可以把完全二叉树存到数组中,这样就形为数组,神为完全二叉树。 #堆序性 就是说所有父亲的值大于孩子的值(等等你就知道为啥了,先记着:-D)   介绍一下下滤算法: 应该如何删除最上面的父亲? 对二叉树熟悉的你一定知道,如果要删除上面的,是先把最上面的和它右子树的最左边的那个叶子换位置,然后删除。 但是这样是不行的,首先:这个不是一个那样的树,不是都是顺序的。其次:这样做会破坏向量的有序性,导致后面都出错 应该把最后面的和最上面 继续阅读 >>


马艺诚 18/07/25 16:35:54
1