随笔
Snakeflute
鲜血与雷鸣
展开
-
字符串平移
要求将一个字符串向右平移n位,溢出的字符放在字符串的左边.给出一个字符串“abcdef”,要求向右偏移n位,并将超过右边的数放到字符串的左边.如果用暴力的方法,每次移动的需要处理string_length次,总的时间复杂度为O(mn).现在有一种较为巧妙的方法,时间复杂度为O(n).首先将需要移动的部分和不进行移动的分为两个部分,对两个部分分别进行翻转,然后再对整体翻转.其中左边要进行翻转部分的长度原创 2016-08-02 10:30:07 · 1595 阅读 · 0 评论 -
最大子段和
解题思路: 需要维护六个变量: - 当前子段和长度 - 当前子段和的起点 - 当前子段和的终点 - 最大子段和长度 - 最大子段和的起点 - 最大子段和的终点如果当前子段和不小于0,就继续向后遍历,同时和最大子段和长度比较更新.如果小于0,那么重置当前子段和.代码#include<stdio.h> int main() { int n; scanf("%d",&n);原创 2016-08-02 11:41:42 · 240 阅读 · 0 评论 -
素因子分解
将一个正整数分解成多个素数因子(可重复)的乘积。 解题思路: 从小到大,利用埃氏筛的思想,变遍历,边记录,复杂度O(1)。代码#include<stdio.h> int main() { int n; //输入一个数,将其分解成素因子 scanf("%d",&n); while(n) { static int flag = 1;原创 2016-08-02 13:47:40 · 2021 阅读 · 1 评论 -
残缺棋盘
残缺棋盘给出一个棋盘,棋盘大小是2^k,k为正数,然后给出一个点是坏点。要求用硬纸板将棋盘填充,硬纸板的形状为单位长度是2的正方形,扣去任意一个单位。即存在四种硬纸板。填充要求,硬纸板不能覆盖坏点,也不能重复覆盖。解题思路 找到坏点所在象限,然后用硬纸板在棋盘中心覆盖,使其余的三个象限都有“坏点”(即将硬纸板看做坏点),这样四个象限所处理的问题就相同,也就是递归。递归的出口就是当单位面积为四的时候原创 2016-08-02 13:49:54 · 1002 阅读 · 0 评论 -
储油点问题
储油点问题一辆重型卡车预穿过长度1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500升。显然卡车装一次油是过不了沙漠的,因此司机必须设法在沿途建立几个储油点,使卡车能顺利穿越沙漠,试问司机如何建立这些储油点?每一个储油点应存多少汽油,才能使卡车以消耗最少汽油的代价通过沙漠?请通过打印储油点的序号,各储油点距离沙漠始点的距离以及储油点的储油量。解题思路: 如果从头向后遍历的话,用DP不可原创 2016-08-02 13:58:20 · 3401 阅读 · 2 评论 -
约瑟夫问题(双向循环链表)
思路: 循环链表模拟#include<stdio.h>typedef struct node{ int code; struct node *pri; struct node *next;}DOUBLE_LINKE_NODE_JOSEPH_CIRCLE;int main(){ DOUBLE_LINKE_NODE_JOSEPH_CIRCLE *head = NULL;原创 2016-08-02 14:19:05 · 635 阅读 · 0 评论 -
OpenGL 窗口创建
使用OpenGL实用库的第一步是初始化GLUT: glutInit(&argc, argv); 接着, 是说明展示窗口的标题: glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); 下面就是指定显示窗口需要显示的内容, 使用OpenGL函数创建一个图并把图的定义传给GLUT函数glutDisplayFunc(即将图赋给显原创 2017-03-17 17:22:07 · 826 阅读 · 0 评论