|
2010年11月10日
由于javaeye现在可以访问,下面的内容将在javaeye中,博客地址 http://clumsybird.javaeye.com
摘要: 问题描述如下:
“一个20*20的数组如下所示
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
 ... 阅读全文
问题描述如下:
“ 毕达哥拉斯三元数组存在{a,b,c},a<b<c,使得a^2+b^2=c^2,如3^2+4^2=5^2=25,求a,b,c满足以上条件,并使a+b+c=1000,给出a*b*c的值。”
代码如下:
/** *//**
* 求毕达哥拉斯三元数组{a,b,c},使得a+b+c=target . 毕达哥拉斯三元数组存在{a,b,c},a<b<c,使得a^2+b^2=c^2
* a > 3,(target-(a+b))^2=c^2=a^2+b^2 --> target^2=2*target*(a+b)-2ab
*
* @return
*/
private static int getNumber(int target) {
int a = 0;
int b = 0;
int c = 0;
for (int i = 3; i < target; i++) {
for (int j = i; j < target; j++) {
if (target * target == 2 * target * i + 2 * target * j - 2 * i
* j) {// target^2=2*target*(a+b)-2ab
a = i;
b = j;
break;
}
}
}
c = target - a - b;
return a * b * c;
}
具体的分析可以看代码注释。得出结果 31875000。
除了直接的办法,应该还有另外的方法来求,保持未完待续状态。
请不吝赐教。
@anthor ClumsyBird
问题叙述如下:
“2520是最小的数能够整除1到10,求能被1到20所整除的最小的数?”
代码如下:
/** *//**
* 数字i从m到n,遍历,如果i不能被result整除,我们就将i除以i与result的最大公约数,并与当前result想乘
*
*/
private static int getNumber(int m, int n) {
int result = n;
for (int i = n - 1; i >= m; i--) {
if (result % i != 0) {
result *= i/gcd(result,i);
}
}
return result;
}
/** *//**
* 最大公约数:欧几里德算法 定理:gcd(a,b) = gcd(b,a mod b)
*
* @param a
* @param b
* @return
*/
private static int gcd(int a, int b) {
if (b != 0)
return gcd(b, a % b);
else
return a;
}
调用getNumber(1,20)即可得到答案232792560。
由于在此用到最大公约数,所以在下面给出了一些实现。
/** *//**
* 最大公约数:欧几里德算法
* @param a
* @param b
* @return
*/
private static int gcd1(int a, int b) {
if (a > b) {
gcd1(b, a);
}
int temp = 0;
for (; b != 0;) {
temp = a % b;
a = b;
b = temp;
}
return a;
}
/** *//**
* 最大公约数:Stein算法 gcd(ka,kb) = k gcd(a,b),也就是最大公约数运算和倍乘运算可以交换,
* 特殊的,当k=2时,说明两个偶数的最大公约数必然能被2整除
*
* @param a
* @param b
* @return
*/
private static int gcdByStein(int a, int b) {
if (a > b) {
gcdByStein(b, a);
}
if (b == 0) {
return a;
}
if (a % 2 == 0 && b % 2 == 0) {
return 2 * gcdByStein(a / 2, b / 2);//a,b都是偶数
}
if (a % 2 == 0) {
return gcdByStein(a / 2, b);//仅a为偶数
}
if (b % 2 == 0) {
return gcdByStein(a, b / 2);//仅b为偶数
}
return gcdByStein((a + b) / 2, (a - b) / 2);//a,b都是奇数
}
如果有其他的方法,也请贴出大家一起讨论。^_^
请不吝赐教。
@anthor ClumsyBird
Elcipse编辑功能比较强大,掌握eclipse快捷键,会很好的提高开发效率,下面就是一些常用快捷键介绍。
1. [ALT+/]
能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁,当记不全类、方法和属性的名字时,可以使用它。
2. [Ctrl+O]
显示类中方法和属性的大纲,能快速定位类的方法和属性。
3. [Ctrl+/][Ctrl+Shift+/][Ctrl+Shift+\]
添加或取消注释//,加上段注释/**/,取消段注释/**/
4. [Ctrl+D][Ctrl+Delete/Backspace][Ctrl+Shift+Delete]
删除当前行,删除下一个/上一个单词,删除到行末
5. [Ctrl+M]
窗口最大化和还原。
6. [Ctrl+K][Ctrl++Shift+K]
快速向下和向上查找选定的内容。
7. [Ctrl+Shift+T]
查找Workspace构建路径中可找到的Java类文件,而且可以使用“*”、“?”等通配符。
8. [Ctrl+Shift+R]
和[Ctrl+Shift+T]对应,查找Workspace中的所有文件(包括Java文件),也可以使用通配符。
9. [Ctrl+Shift+G][Ctrl+Alt+G][Ctrl+G]
搜索选中元素的引用,搜索选中的文本,搜索选中元素的声明
10. [Ctrl+Shift+O][Ctrl+Shift+M]
快速生成import,添加选中导入
11. [Ctrl+Shift+F]
格式化代码。
12. [ALT+Shift+W]
快速定位浏览器视图的位置。
13. [Ctrl+L]
定位到某一行。
14. [Alt+←][Alt+→]
后退前进历史记录。
15. [F3][Ctr+鼠标左键]
快速定位光标处的某个方法,属性或者类。
16. [F4]
显示类的继承关系,并打开类继承图。
17. [Ctrl+Shift+B]
设置断点或者取消断点。
18. [F11]
调试最后一次运行的程序。
19. [Ctrl+F11]
运行最后一次运行的程序。
20. [F5]
debug时跟踪到某一个方法中。
21. [F6]
单步debug。
22. [F7]
debug时[F7]会执行完方法,返回到调用此方法的后一条语句。
23. [F8]
debug时,如果使用[F8]就继续执行,到下一个断点或程序结束。
24. [Ctrl+C][Ctrl+V][Ctrl+X][Ctrl+Z][Ctrl+S][Ctrl+F][Ctrl+Y]
复制,粘贴,剪切,撤消,保存,查找,重复。
25. [Ctrl+F6][Ctrl+Shift+F6][Ctrl+F7][Ctrl+Shift+F7][Ctrl+F8][Ctrl+Shift+F8]
切换到下一个编辑器,上一个编辑器,下一个视图,上一个视图,下一个透视图,上一个透视图。
26. [Ctrl+1]
快速修正,很有用。
27. [Shift+F2]
打开外部java文档。
28. [Ctrl+H]
打开搜索对话框。
29. [Alt+Shift+T][Alt+Shift+C][Alt+Shift+V][Alt+Shift+R]
快速显示重构菜单,重构-改变方法签名,重构-移动,重构-重命名
30. [Alt+Left/Right][Ctrl+Shift+Left/Right/Up/Down][Alt+Shift+Up/Down/Left/Right][Alt+Up/Down][Ctrl+Alt+Up/Down]
上一次/下一次光标所在位置,上一个单词/下一个单词/上一个成员/下一个成员(成员对象或成员函数),选中闭合元素,上下移动选中的行,拷贝选中的行。
31. [Ctrl+Shift+Enter][Shift+Enter]
在当前行上插入一行,在当前行下插入一行。
32. [End/Home][Ctrl+Right/Left][Ctrl+Up/Down][Shift+End/Home]
行末/行首,前一个/后一个单词,上下滚屏,选中到行末/行首
33. [Ctrl+T][Ctrl+Alt+H]
快速层次结构,打开调用层次结构。
34. [Ctrl+Q]
上一个编辑的位置。
35. [Ctrl+Shift+S]
保存所有。
36. [Ctrl+.]
下一个命中的项(搜索之后)。
37. [Ctrl+Shift+X/Y]
变为大/小写
大家有好用的快捷键,可以一起分享。 @anthor ClumsyBird
一 安装git
http://code.google.com/p/msysgit/downloads/list下载,安装即可。
二 android代码仓库
http://android.git.kernel.org 可以看到android所有git包的列表。
三 下载android source
在windows下创建目录android src,右击选择Git Bush,输入git clone git://android.git.kernel.org/platform/external/v8.git,即可下载external/v8下的源代码.其他的源码下载以此类推。
四 命令解释
git clone是命令,git://android.git.kernel.org/platform/external/v8.git,可以选择git包列表的一项,点击进入,在http://android.git.kernel.org 中可以看到。
@anthor ClumsyBird
一 相关下载
(1) java JDK下载:进入该网页: http://java.sun.com/javase/downloads/index.jsp 选择 Download JDK 只下载JDK,无需下载jre.
(2)eclipse下载: 进入该网页: http://www.eclipse.org/downloads/我们选择第一个(即eclipse IDE for java EE Developers).
(3)下载Android SDK:说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本,后一种大概20多M,前一种70多M。http://developer.android.com/sdk/
二 软件安装
(1)安装jdk: 安装完成即可,无需配置环境变量.
(2)解压eclipse:eclipse无需安装,解压后,直接打开就行.
(3)解压android sdk:这个也无需安装,解压后供后面使用
三 Eclipse配置
(1) 安装android 开发插件
打开Eclipse, 在菜单栏上选择 help->Install New SoftWare,点击 Add按钮,输入网址: https://dl-ssl.google.com/android/eclipse/ (如果出错,请将https改成http)名称: Android (这里可以自定义),点击OK,选择Developer Tools,点击Next,点击next,选择accept,点击next,等待安装完成,重启eclipse。
(2)配置android sdk
点击菜单window->preferences,选择你的android SDK解压后的目录,选错了就会报错,这个是升级工具,目前还没有一个版本的SDK,升级SDK版本,选择菜单 window->Android sdk and avd manager,选择update all按钮,选择左边的某一项,点击accept表示安装,点击reject表示不安装,我这里只选了SDK 2.1 和samples for api 7 , 自己可以任意自定义,确定后,选择install按钮,进入安装界面,等待安装完成。
(3)新建AVD(android vitural device)
和上面一样,进入android sdk and avd manager,选中Vitural Devices 在点击New按钮,名称可以随便取,target选择你需要的SDK版本,SD卡大小自定义,点击 Create AVD,点击ok,创建AVD完成。
四 新建Android项目
(1)新建项目
选择菜单file->new->other,选择新建Android Project项目,点击Next按钮,名称自定义,应用程序名自定义,报名必须包含一个点以上,min SDK version里面必须输入整数,点击finish。
注: 若有错误如: Project ... is missing required source folder: 'gen' ,则将gen->Android.Test->R.java这个文件删掉,Eclipse会为我们重新生成这个文件,并且不会报错
(2)配置运行
右键项目->Run as -> Run Configuration,点击Browse 按钮,选择你要运行的项目,选择Target切换界面,该界面选择运行的AVD,将AVD前面的方框设置为选择状态。
(3)测试项目运行
右键项目名称->run as ->Android Application 即可启动运行该Android程序.
五 结束语
至此,android开发环境搭建完毕,有问题请留言。
@anthor ClumsyBird
|