主页

小端和大端的区别

定义 其实选择哪种字节顺序可以说是任意的,没有技术上的原因 来选择字节顺序,所以可能是开发者在工作中为了某项方便操作而选择大端或小端。 大端 大端即big-endian,最高位字节(最左边)存储在最低的内存地址,类似于我们从左到右的阅读顺序 示例: 解释:地址的读取顺序为 0x0A,0x0B,0x0C,0x0D 小端 大端即little-endian,最低位字(最左边)节存储在最低的内存地址,类似于我们从左到右的阅读顺序 示例: 解释:地址的读取顺序为 0x0A,0x0B,0x0C,0x0D

阅读更多

assert()函数用法

assert宏的原型定义在<assert.h>中,其作用是如果它的条件返回错误,则终止程序执行,原型定义: #include <assert.h> void assert( int expression ); #assert的作用 对于现行表达式expression,如果真值为假,向stderr打印错误信息,调用abort结束程序 int main( void ) { FILE *fp; fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,如果不存在就创建一个同名文件 assert( fp ); //所以这里不会出错 fclose( fp ...

阅读更多

输油管道最小总长度求解

##大致思路: 通过查询相关资料后,发现了最优总长度为各个油井到主输油管道的最短路径与中位数的距离之和 利用分治法思想,将查找区间慢慢缩小 首先在n个数据中查找第n/2+1小的数据,即中位数 将n个数据分成两个集合,一个左子集,剩余的为右子集 若在左子集查找到第n/2+1小的数据有n/2个,则找到中位数 若在左子集查找到第n/2+1小的数据小于n/2个,则舍弃左子集,在右子集查找,依次递归。 若在左子集查找到第n/2+1小的数据大于n/2个,则舍弃左子集中的第一个元素,并继续在该左子集查找,依次递归。 ##主函数: 定义变量油井数量n,中位数mid,总长度sum 提示用户输入油井的总数量,并依次输入Y坐标 调用函数FindMid(0,...

阅读更多

背包问题

##大致思路: 穷举法 定义一个具有N个元素的一维数组(N表示物品数),用二进制模拟的方式代表每个物品的存放状态 将存放状态放入该一维数组中,并依次循环计算每种状态的总价值,若总重量不超过最大限度并且比之前保存的最优值大的话,则更新数据,使最优值为此次的数据;若总重量超过最大限度,则舍弃。 循环结束后,一维数组保存了所有物品的存放状态,依次即可算出最大值 动态规划法 通过分析得出以下公式 V(i,0)=V(0,j)=0 (i,j)=V(i-1,j) jwi 分析得出如果第i个物品的重量大于背包的容量,则装人前i个物品得到的最大价值和装入前i-1个物品得到的最...

阅读更多

棋盘覆盖问题

##大致思路: 运用分治法思想,每次将棋盘分成4个边长为2^k-1的小棋盘 依次判断在每个小棋盘中,特殊方块是否在其中,若在,则继续递归,直到边长为1 若不再,则根据小棋盘的位置,将某个小棋盘内的对应的方块设置为特殊方块(若小棋盘在左上角,则设置右下角为特殊方块;若小棋盘在左下角,则设置右上角为特殊方块;若小棋盘在右边上角,则设置左下角为特殊方块;若小棋盘在右下角,则设置左上角为特殊方块;),然后继续递归,直到边长为1。 当递归层层退出到第一层时,棋盘覆盖完毕。 ##主函数: 定义变量size,row,column 使用户输入矩阵大小size,特殊方块的行号、列号 判断输入的数据的合法性,若合法,调用Chess(0, 0, row, column, ...

阅读更多

循环日程赛问题

##大致思路: 利用分治法思想,将选手一直划分为人数为2的日程表,则必定为 1 2 2 1 通过规律直接复制左下角部分的数据 通过规律,将左上角的数据复制到右下角,将左下角的数据复制到右上角 ##主函数: 定义变量k,定义数组array[N][N] 提示用户输入K,并判断合法性,若合法,则调用函数 Gametable(k, array)得到日程表,并调用Play(k, array)输出日程表 ##Gametable (…)函数: 首先,直接赋值array[1][1]、array[1][2]、array[2][1]、array[2][2] 判断k的大小,决定分成几大步制作日程表 通过赋值语句array[i][j] = array...

阅读更多

指针数组与数组指针的区别

什么是指针数组 指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针 什么是数组指针 数组指针:a pointer to an array,即指向数组的指针 举例说明 下面举例说明: int*a[4] 指针数组 表示:数组a中的元素都为int型指针 元素表示: *a[i]和 *(a[i])是一样的,因为[]优先级高于 * int (*a)[4] 数组指针 表示:指向数组a的指针 注意:在实际应用中,对于指针数组,我们经常这样使用: typedef int* pInt; pInt a[4]; 这跟上面指针数组定义所表达的意思是一样的,只不过采取了类型变换。 代码演示如下: #include using namespace s...

阅读更多

指针函数与函数指针的区别

#指针函数 先看下面的函数声明,注意,此函数有返回值,返回值为int *,即返回值是指针类型的。 int *f(int a, int b); 上面的函数声明又可以写成如下形式: int* f(int a, int b); 让指针标志 * 与int紧贴在一起,而与函数名f间隔开,这样看起来就明了些了,f是函数名,返回值类型是一个int类型的指针。 下面看指针函数的实现: int *f(int a, int b); // 声明指针函数 int _tmain(int argc, _TCHAR* argv[]) { printf("------------------------------ Start\n"); int *p1 = N...

阅读更多

使用 .gitignore 忽略 Git 仓库中的文件

使用 .gitignore 文件忽略指定文件 .gitignore 在Git中,很多时候你只想将代码提交到仓库,而不是将当前文件目录下的文件全部提交到Git仓库中,例如在MacOS系统下面的.DS_Store文件,或者是Xocde的操作记录,又或者是pod库的中一大串的源代码。这种情况下使用.gitignore就能够在Git提交时自动忽略掉这些文件。 忽略的格式 # :此为注释 – 将被 Git 忽略 *.a :忽略所有 .a 结尾的文件 !lib.a : 不忽略 lib.a 文件 /TODO :仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO build/ : 忽略 build/ 目录下的所有文件 doc/*.txt : 会忽...

阅读更多

Git 代码回滚

并不适合阅读的个人文档。 git revert 和 git reset 的区别 先看图: sourceTree 中 revert 译为提交回滚,作用为忽略你指定的版本,然后提交一个新的版本。新的版本中已近删除了你所指定的版本。 reset 为 重置到这次提交,将内容重置到指定的版本。git reset 命令后面是需要加2种参数的:–-hard 和 –-soft。这条命令默认情况下是 -–soft。 执行上述命令时,这该条commit号之 后(时间作为参考点)的所有commit的修改都会退回到git缓冲区中。使用git status 命令可以在缓冲区中看到这些修改。而如果加上-–hard参数,则缓冲区中不会存储这些修改,git会直接丢弃这部分内容。可以使用 git push...

阅读更多