算法

【编程之美】中国象棋将帅问题

问题描述 在中国象棋里将和帅是不能碰面的,如下图所示,当将位于d10时,帅就不能在d1,、d2、d3。请写一个程序,输出将、帅所有的合法位置。要求在代码中仅用一个变量。 如果只是输出将、帅的合法位置,那这题就比较容易了,只要二重循环判断一下就行,但后面一个条件就将题目的难度上升了好多。 算法分析 因为是判断两个对象A、B的位置符不符合要求,而且每个对象一共就只有9个位置可选,可以比较快地想到程序的大体框架: 1. 遍历A的位置 2. 遍历B的位置 3. 判断A、B的位置组合是否满足要求 4. 如果满足,则输出 因为每个对象只有9个位置,所以循环次数一共也就81次。

  • zgljl2012
4 min read
C++

【算法】检测数组里是否有两个数之和等于某个数

问题: 检测数组里是否有两个数之和等于某个数 解决方法一:先将数组排序,然后从两头开始遍历 数组排序后,从左端开始取最小值,从右端取最大值, 判断两者之和与目标的大小: 1. 等于时,输出两个数; 2. 大于时,右端移到第2个数,继续判断; 3. 小于时,左端移到第2个数,继续判断。 #include #include #include using namespace std; void fun1(int a[], int length, int

  • zgljl2012
2 min read
C++

【算法】十进制字符串转十六进制字符串

问题描述 将一个十进制字符串转化为十六进制字符串。 问题解决 这个问题如果只是十进制转化为十六进制,其实是比较容易的,只要了解短除法就可以解决了,但题目里数是字符串,这就将题目的难度增高了。因为如果只是int型,那最多也就支持个10位数;但字符串却可以上千位,所以我们使用短除法的时候会比较麻烦。 这里我先将字符串转成了int型,先把简单的10位数的实现出来,来理顺一下思路。下面是10进制数转16进制的代码: int main(){ string s; while (cin >> s){ int n = 0; // 将字符串转换为int类型 for (int i = s.length() -

  • zgljl2012
6 min read
C++

【ACM】K尾相等数

问题描述: 从键盘输入一个自然数K(K>1),若存在自然数M和N(M>N),使得K^M 和K^N均大于或等于1000,且它们的末尾三位数相等,则称M和N是一对"K尾相等数"。请编写程序,输出M+N最小的K尾相等数。 样例: 输入输出2120问题分析: 末尾三位数只有1000个,从1到无穷大增大幂次时,肯定会出现同样的末尾三位数,比如n=10时(`n^M`大于1000时才有末尾三位数),幂次M12345n^M 10100100010000100000末尾三位数无无000所以当幂次为3时出现了第一个三位数,当幂次为4时出现了第二个三位数,N = 3,

  • zgljl2012
1 min read
C++

【算法】烙饼排序

问题描述: 把一摞大小不一的烙饼按顺序排好,大的在下面,小的在上面, 要求只能用一只手去翻转烙饼位置,另一只手要端盘子; 输出最优化的排序过程。 -------------------------------------------------------------------------------- 示例: 3 1 2 翻转 1 , 当前烙饼排序 3 2 1 成功! -------------------------------------------------------------------------------- 算法描述: 问题解析:一个未排序的数列,如 a,b,c,d,~z 每一次选取其中一个数,将它与最后一个数之间的 所有数(包含它们两个)

  • zgljl2012
2 min read
python

Python Flask静态目录

在创建了Flask项目之后,如果不想用到模板引擎,想做前后端分离的项目时,就需要用到静态目录了。Flask的静态目录规定是static,也就是说所有的静态文件需要放到static文件夹下才能访问到。如下目录: - app.py - static - index.html 要访问index.html,需要通过Url:http://localhost:5000/static/index.html 也就是说要加上static路径进行访问。但这样又很不方便,因为要加static的话,访问html的url就显得有些“丑”了。这个时候,可以使用参数 static_

  • zgljl2012
1 min read
Android

【Android进阶篇】Fragment的两种加载方式

一、概述 Fragment(碎片,片段)是在Android 3.0 后才引入的,主要的目的是为了实现在大屏幕设备上的更加动态更加灵活的UI设计。这是因为平板电脑的屏幕比手机大得多,所以屏幕上可以放更多的组件,而不是简单地只是把手机上的组件放大。所以 Fragment在应用中的是一个可重用的模块化组件,它有自己的布局、自己的生命周期,在一个Activity中可以包含多个Fragment。 二、在Activity中加载Fragment Fragment的加载方式包含两种:静态加载和动态加载。静态加载很简单,我们只需要把Fragment(片段)当成普通UI控件放到界面Layout 中就行;动态加载稍微复杂一点,需要用到事务。 三、静态加载 在Activity中静态加载Fragment的过程分为三步: 1.

  • zgljl2012
6 min read
nodejs

【Node.js基础篇】使用net模块和Readline模块实现Socket通信

Node.js的socket通信和C++、Java的非常相像,学过这两种语言的socket通信的同学可以很快就掌握好Node.js的socket通信。下面我们以实现一个Echo服务器的服务端和客户端为目的,学习一下Node.js的socket通信。 > 所谓的Echo服务器指的是这样一种服务器:客户端发送一条消息给服务端,服务端就把这条消息原封不动地返回给客户端。 -------------------------------------------------------------------------------- 服务端 服务端的实现分为三步: * 通过createServer创建一个server服务端 * 使用server的listen方法监听指定端口,等待客户端接入 * 通过socket对象来监听data、close等事件,用以完成与客户端的交互 下面是服务端代码: /** * Created by Administrator on 2015/9/8. */ var net = require('net'); // 服务器IP

  • zgljl2012
4 min read
C++

【Cocos2d-X】TableView的使用

在Cocos2d-x使用TableView的过程如下: * 首先用一个类继承CCTableViewDelegate(代理)和CCTableViewDataSource(数据源); * 然后实现里面的有关tableView操作和内容的四个抽象方法; * 最后就可以在场景类中通过CCTableView来使用这个类,CCTableView会分别设置代理对象和数据源对象 示例: TableView.h #ifndef _TABELVIEW_H_ #define _TABLEVIEW_H_ #include "cocos2d.h" #include "cocos-ext.h" using namespace cocos2d; class TableView : public cocos2d::extension::CCTableViewDelegate, public

  • zgljl2012
2 min read
zgljl2012@gmail.com