很使用的一个方法,相信开发java web的童鞋经常用吧。
[mw_shl_code=java,true]public final static String MD5(String s) {
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' };
try {
byte[] btInput = s.getBytes();
// 获得MD5摘要算法的 MessageDigest 对象
MessageDigest mdInst = MessageDigest.getInstance("MD5");
// 使用指定的字节更新摘要
mdInst.update(btInput);
// 获得密文
byte[] md = mdInst.digest();
// 把密文转换成十六进制的字符串形式
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++) {
byte byte0 = md;
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}[/mw_shl_code]
[查看全文]
本帖最后由 轻舟过 于 2012-5-6 14:49 编辑
大家可以做做啦,前面几题其实不难的。链接在这里http://codeforces.com/contest/186
各种语言都支持的,做完可以去交一下。我会用中文大概描述下题意,如果大家看英文不太吃力的话建议还是看原来的题目。当然输入输出还是要参考下题目的。
A. 给定两个基因S、T,如果交换S中的两个字符可以得到T,则判定他们属于同一物种,输出YES、否则输出NO。S、T为长度小于10^5的字符串,且只包含小写字母。另外如果长度不相等,则S、T是不属于同一物种的。
B. 有一个使蘑菇生长的比赛,每个人从高度0开始使蘑菇以速度v1厘米每秒生长t1秒,然后中场休息,中场休息时蘑菇高度会下降K%,之后每个人以v2厘米每秒的速度生长t2秒,现在知道第i个人所使用的速度是ai, bi,但是不知道先用ai还是bi。现在假设每个人采用最佳的策略,问最后的排名是怎么样。从最高的高度以降序输出排名,每行输出选手编号和蘑菇高度。
C. 有一种植物按如下方式生长,初始为形如最左的性状,每经过一个单位时间,每个三角形分裂成4个小三角形。问经过n个单位的时间(0<=n<=10^18),会产生多少个尖角向上的小三角形。输出答案对 1e9+7求余的结果。
D. 背景什么的略去了。给定整数S(1<=S<=1000)和整数a、b、c(0<=a, b,c<=1000),求在约束x+y+z<=S, x>=0, y >=0, z >= 0下,求x^a*y^b*z^c的最大值在x,y,z分别等于什么时取到。在这个问题中认为0^0=1。
E. 如图第1层有n(n<=50)个托盘、第二层有n-1个托盘,依次类推到第n层有1个托盘,第i层左数第j个托盘限重wij,一旦超过限重,托盘可能会向左或者向右翻(当然边界的只有一种可能性),倒入下一层左边或右边的托盘。现在在第一层的托盘上放上a1~an的重量(同时放),假设同一层的托盘是同时打翻的,问最底层的托盘有没有打翻的可能。
[查看全文]
大家好我是卖的很欢乐,由于很多游戏方面的教材是基于vc++6.0的所以就以他为平台吧
下面是3年时间你准备选择的,我们是业余的没这么多时间,全面发展,而已计算机是个很深奥的东西,所以能熟练掌握1样,也很不错了
,当然你也可以研究其他的如果还有其他时间的话!
吐槽:我是半灌水,神马都懂一点点!
服务端程序猿
精通C++,熟悉Lua脚本语言 ps:python也不错,但lua支持多线程,python每个虚拟机只支持1个线程!而已拥有完善的类库
熟悉各种数据结构和算法
熟悉TCP/IP,Socket,ACE,UDP等网编程,ps:tcp-ip协议!3本板砖
熟悉数据库程序设计 ps:这个高性能数据程序设计很重要,精通MySQL数据库结构设计,精通SQL语句的优化!
熟悉多线程编程技巧 ps:简而言之就是熟悉windows平台开发。ps:不容易呀!
学习流程->C++->数据结构与算法->操作系统->windows编程->通信协议->windows网络编程ps:然后,高效通信模型是必不可少的
->数据库原理ps:然后sql,同意查询嘛,都用得到的->数据库诊断与性能优化,->加密解密基础,,ps游戏版本管理,升级这些也是要考虑的,亲!
2D程序猿
精通C/C++,精通C++,熟悉Lua脚本语言
熟悉 ATL
ps:
Active Template Library活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。这种COM组件可以包含属性页、对话框等等控件。
而DirectX是由微软公司创建的多媒体编程接口。由C++编程语言实现,遵循COM。被广泛使用于Microsoft Windows、Microsoft Xbox和Microsoft Xbox 360电子游戏开发,并且只能支持这些平台。最新版本为DirectX 11,创建在最新的Windows 7上。
熟悉 stl
ps:
STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。
熟悉常用的win32 API;ps:windos编程
熟悉各种数据结构和算法
熟悉计算机图形学
熟悉DirectX
学习流程->C++->数据结构与算法->操作系统->windows编程->ATL ps:潘爱民翻译低滴!->计算机图形学->directx
3D程序猿
具备所有2d程序猿的技能,然后附带->游戏开发物理学技能
ps:威武啊,俨然成为全能骑士啦
脚本程序猿
熟悉C++,精通lua;
熟悉数据结构与算法
学习流程c++->lua->数据结构与算法
ps:当然要想要更多的提升可以学习:编译原理,然后在学习游戏高级脚本编程!
AI程序猿
熟悉C++,lua
熟悉数据结构与算法
熟悉游戏人工智能
学习流程->c++->lua-数据结构与算法->游戏人工智能
ps:高智商的monkey
工具程序猿
熟悉c++,lua
熟悉数据结构与算法
精通windows编程
学习流程->c++->lua->数据结构与算法->windows编程
ps:想要充分了解windows编程也不是那么容易
[查看全文]
-.-本人是软件专业的刚毕业的学生,java程序猿,因为喜欢游戏所以想以后用业余时间学习游戏编程,DirectX编程的各个方面当然一时半会就行的,所以拟定3年的时间,有想法的就来一起吧
Recca Studio QQ群 195660307
[查看全文]
本帖最后由 轻舟过 于 2012-5-1 16:10 编辑
不太清楚是不是适合发到这个版
其实相比与编程语言来说,算法是更像魔法一般的存在。
简介
维基百科上对“算法”的定义是“指完成一个任务所需要的具体步骤和方法"。也就是给定一定的输入,能够得到所要求的输出的方法。
虽然现在算法时常和计算机一同被提到,实际上算法在计算机产生的很久以前就已经产生了,它在古代被称为“术”,最早出现在《周髀算经》、《九章算术》,尤其是特别是《九章算术》,给出四则运算、最大公约数、最小公倍数、开平方根、开立方根、求素数的埃拉托斯特尼筛法,线性方程组求解的算法。三国代的刘徽给出求圆周率的算法:刘徽割圆术。在计算机技术迅速发展的今天,我们更是在有意无意之间接触到各种算法。比如在使用word的时候,查找替换就是使用了字符串匹配的算法,word会帮你纠错也是因为实现了相应的纠错算法。社交网络中的好友推荐、matlab中数值计算、google检索网页都用到了特殊的算法。一般编程语言自带的库中也实现了各种常用的数据结构和算法,像C++中的STL就实现了链表、平衡查找树、优先队列等数据结构。在平时写程序之前使用算法分析的方法,估算下自己的方法能不能在较短时间内出解以及是否能得到正确的解,就能避免为不好的方法编码而浪费时间。
可以说,算法不管是在计算机的各个领域中,还是在现代技术的革新中都承担了重要的角色。个人感觉算法有很多有趣的地方,不过也有非常考验思维的地方。
最大公约数算法
举个最简单求最大公约数的算法来说明,这里输入是两个数a,b,输出是a和b的最大公约数。
算法1很直观的方法是从min(a, b)开始枚举,直到遇到能同时整除两个数的数为止,代码如下:
[mw_shl_code=cpp,true]int gcd(int a, int b) {for(int i = min(a, b); i > 0; --i) {
if(a % i == 0 && b % i == 0)
return i;
}
return -1;
}[/mw_shl_code]
上面的方法需要测试的数是min(a, b)个,需要做2*min(a,b)次求余操作
算法2
其实我们初中就学过的一个求最大公约数的算法叫做辗转相除法,就是每次将大的数对小的数取余,用得到的余数替换掉大的数,一直这么做下去,直到某次整除了那个数就是要求的最大公约数。实现的代码如下,我个人非常喜欢这个代码实现:
[mw_shl_code=cpp,true]int gcd(int a, int b) {return (a == 0 ? b : gcd(b % a, a));
}[/mw_shl_code]
这个算法中求余等操作的次数比较难以计算,直观地来讲,算法1在a、b大于1e8的时候就比较慢了,而算法2在引入大数运算之后甚至可以用于a、b等于1e100,1e1000数量级的运算。
可以看到,不同的算法在运行效率上有质的差别,一般算法分析上会用时间复杂度和空间复杂度来衡量一个算法的好坏,关于这两者,下次再说吧。
最后有个问题大家可以思考讨论下:
Fibonacci数开始两项为1,后面每一项为前面两项之和,即f(1)=1, f(2)=1; f(n) = f(n - 1) + f(n-2) n >= 3
规模不断扩大的几个问题
1. 求第15个Fibonacci数
2. 求第1007个Fibonacci数除以1e9+7的余数(这里求余数是为了避免大数运算)
3. 求第1e9+3个Fibonacci数除以1e9+7的余数
[查看全文]
题目描述:
读入N名学生的成绩,将获得某一给定分数的学生人数输出。
输入:
测试输入包含若干测试用例,每个测试用例的格式为
第1行:N
第2行:N名学生的成绩,相邻两数字用一个空格间隔。
第3行:给定分数
当读到N=0时输入结束。其中N不超过1000,成绩分数为(包含)0到100之间的一个整数。
输出:
对每个测试用例,将获得给定分数的学生人数输出。
样例输入:
3
80 60 90
60
2
85 66
0
5
60 75 90 55 75
75
0
样例输出:
1
0
2
[查看全文]
大家可以用自己熟悉的语言实现一段和如下JavaScript代码等价的程序。
亮点在于实现add(2)(3)(4)(5)这种诡异的语法……[查看全文]<script>function add(x){var c = 0;return function(x){c = c + x;arguments.callee.toString = function(){return c;};return arguments.callee;}(x);};alert(add(2)(3)(4)(5));</script>
