- 浏览: 111718 次
- 性别:
- 来自: 北京
最新评论
-
bo_hai:
请问:这样配置可以解决事务回滚的问题吗?
基于spring和ibatis的多数据源切换方案 -
rockydang:
多谢分享。
第一个配置文件中有一块配置错了,估计是手误啊
...
基于spring和ibatis的多数据源切换方案 -
chao121:
[*]啊顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶121 ...
征求方案-关于多个excel,大数据量同时导入 -
jitabc:
效果很不错。
为spring2.5中的jpetstore增加perf4j监控 -
徐风子:
<p>原题来自:http://projecteul ...
一道软件面试题
从第一行的第一个数字开始,计算下一行临近的两个数字中较大的一个,统计所有临近较大数字的总和,看下例:
5
9 6
4 6 8
0 7 1 5
计算总和为:5+9+6+7=27
用程序计算附件中的总和值。
simplest Demo:
package algorith; import java.io.InputStream; import java.util.List; import org.apache.commons.io.IOUtils; public class TestTriangle { /** * @param args */ public static void main(String[] args) throws Exception { InputStream ins = TestTriangle.class.getResourceAsStream("file2.txt"); List<String> lines = IOUtils.readLines(ins); for(String line:lines){ //System.out.println(line); } int[][] arrays = new int[lines.size()][]; int i = 0; for(String line:lines){ String[] temp = line.split(" "); arrays[i] = getIntArray(temp); i++; } int max = getMax(arrays); System.out.println("Max=="+max); } public static int[] getIntArray(String[] strs){ int[] temp = new int[strs.length]; int i = 0; //StringBuffer sb = new StringBuffer(""); for(String s:strs){ temp[i] = Integer.parseInt(s); //sb.append(temp[i]).append("-"); i++; } //System.out.println("=length="+temp.length); return temp; } public static int getMax(int[][] arrays){ int max = arrays[0][0]; //System.out.println("=number="+arrays[0][0]); int px=0,py=0; for(int i=1;i<arrays.length;i++){ px = i; int pyl = py; int pyr = py+1; if(arrays[px][pyl]>=arrays[px][pyr]){ py = pyl; }else{ py = pyr; } //System.out.println("=number="+arrays[px][py]); max += arrays[px][py]; } return max; } }
运算结果为655321,结果正确吗?
- file2.rar (11.8 KB)
- 下载次数: 161
评论
18 楼
徐风子
2010-07-14
<p>原题来自:http://projecteuler.net/index.php?section=problems&id=18</p>
<p> </p>
<p>java解法:</p>
<pre name="code" class="java">public static int maxSum(int[][] graph, int x, int y, int sum) {
if (x == 14)
return sum+graph[x][y];
int max = max = Math.max(maxSum(graph, x+1, y, sum), maxSum(graph, x+1, y+1, sum));
sum += graph[x][y];
return sum+max;
}</pre>
<p> 很简单嘛。</p>
<p> </p>
<p>随便贴一段里面最牛逼的解题代码:</p>
<pre name="code" class="Haskell">triangle =
[[75],
[95, 64],
... Snip ...
[04, 62, 98, 27, 23, 09, 70, 98, 73, 93, 38, 53, 60, 04, 23]]
main = print (foldr1 reduce triangle)
where reduce a b = zipWith (+) a (zipWith max b (tail b))</pre>
<p> </p>
<p>java解法:</p>
<pre name="code" class="java">public static int maxSum(int[][] graph, int x, int y, int sum) {
if (x == 14)
return sum+graph[x][y];
int max = max = Math.max(maxSum(graph, x+1, y, sum), maxSum(graph, x+1, y+1, sum));
sum += graph[x][y];
return sum+max;
}</pre>
<p> 很简单嘛。</p>
<p> </p>
<p>随便贴一段里面最牛逼的解题代码:</p>
<pre name="code" class="Haskell">triangle =
[[75],
[95, 64],
... Snip ...
[04, 62, 98, 27, 23, 09, 70, 98, 73, 93, 38, 53, 60, 04, 23]]
main = print (foldr1 reduce triangle)
where reduce a b = zipWith (+) a (zipWith max b (tail b))</pre>
17 楼
eddysheng
2010-07-14
昨晚想了一下,其实用动态规划算法并不适合这道题,也许上面的要求换成求自上而下相邻的数字的和的最大值,用动态规划才合适。毕竟题目的要求是下一行相邻数字中较大的一个累加,这也就决定了如果下一行相邻数字不相同的话,自上而下只有一条路可以走。
另外说一下,上面的测试程序没有考虑如果下行相邻两数字相同的情况,相同的情况就可能出现几个最终值,需要最后进行比对得出最大值。
另外说一下,上面的测试程序没有考虑如果下行相邻两数字相同的情况,相同的情况就可能出现几个最终值,需要最后进行比对得出最大值。
16 楼
hz86655032
2010-07-13
xdsnet 写道
这个分解开其实就是每行的冒泡比较出最大数然后累加吧,应该是比较简单的,复杂度应该是固定值。
哥哥,题目看清楚。
15 楼
eddysheng
2010-07-13
这个看来用动态规划算法比较合适,刚才网上搜索了一下,发现已经很多解法,其中一个是来自http://www.java3z.com/cwbwebhome/article/article5/51198.html
内容:
内容:
public class Test{ public static void main(String args[]){ int n=5; int a[][]={{0,0,0,0,0,7,0,0,0,0,0}, {0,0,0,0,3,0,8,0,0,0,0}, {0,0,0,8,0,1,0,0,0,0,0}, {0,0,2,0,7,0,4,0,4,0,0}, {0,4,0,5,0,2,0,6,0,5,0}}; int s[][]=new int[5][11]; s[0][5]=a[0][5]; for(int i=1;i< n;i++){ for(int j=1;j< 10;j++){ s[i][j]=Math.max(s[i-1][j-1],s[i-1][j+1])+a[i][j]; } } System.out.println("原始数据"); for(int i=0;i< n;i++){ for(int j=0;j< 11;j++){ System.out.printf("%-4d",a[i][j]); } System.out.println(); } System.out.println(); System.out.println("对应的最大路径"); for(int i=0;i< n;i++){ for(int j=0;j< 11;j++){ System.out.printf("%-4d",s[i][j]); } System.out.println(); } System.out.println(); System.out.println("最长路径的值为:"); System.out.println(max(s[n-1])); } public static int max(int b[]){ int max=b[0]; for(int i=1;i< b.length;i++){ if(b[i]>max) max=b[i]; } return max; } }
14 楼
imtrash
2010-07-13
不知道是不是写的罗嗦,请指正。
asd.txt文件内容格式如附件中图片。
package MianShi; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class exam1 { public static void main(String args[]){ try { InputStream is = new FileInputStream("src/MianShi/asd.txt"); InputStreamReader in = new InputStreamReader(is); BufferedReader bufReader = new BufferedReader(in); String lineContent;//每行的内容 boolean firstLine = true;//是否是第一行 int upperIndex = 0;//焦点index int preIndex;//当前行与焦点临近的前一个数的index int nextIndex;//当前行与焦点临近的后一个数的index int upperValue = 0;//焦点值 int preValue;//当前行焦点前一个值 int nextValue;//当前行焦点后一个值 int total = 0;//总值 while((lineContent = bufReader.readLine())!=null){ if(firstLine){ upperIndex = lineContent.length()-1; preIndex = 0; nextIndex = 0; upperValue = Integer.parseInt(""+lineContent.charAt(upperIndex)); preValue = 0; nextValue = 0; total += upperValue; firstLine = false; }else{ preIndex = upperIndex - 1; nextIndex = upperIndex + 1; preValue = indexGetValue(preIndex,lineContent); nextValue = indexGetValue(nextIndex,lineContent); upperValue = focused(preValue, nextValue); upperIndex = (upperValue==preValue?preIndex:nextIndex); total += upperValue; } } System.out.println(total); bufReader.close(); in.close(); is.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static int indexGetValue(int index, String lineContent) { return Integer.parseInt(""+lineContent.charAt(index)); } private static int focused(int pre, int next){ return pre>next?pre:next; } }
asd.txt文件内容格式如附件中图片。
13 楼
tangshuang
2010-07-13
我不知道你的文件格式是什么样的,不过可以模拟一下,你参考一下吧:
public class Test2 { public static void main(String[] args) { StringBuffer sb = new StringBuffer(); sb.append("5\r"); sb.append("9 6\r"); sb.append("4 6 8\r"); sb.append("0 7 1 5\r"); System.out.println(sb.toString()); System.out.println("------------------"); int sum = 0; int rowMaxIndex = 0; String[] rows = sb.toString().split("\r"); for (int i = 0; i < rows.length; i++) { String row = rows[i]; String[] cells = row.split(" "); int cellMax = Integer.parseInt(cells[0]); int min = rowMaxIndex <= 0 ? 0 : rowMaxIndex; int max = rowMaxIndex >= cells.length - 1 ? cells.length - 1 : rowMaxIndex + 1; for (int j = min; j <= max; j++) { int temp = Integer.parseInt(cells[j]); if (temp > cellMax) { cellMax = temp; rowMaxIndex = j; } } System.out.println(cellMax); sum += cellMax; } System.out.println(sum); } }
12 楼
angi_sky
2010-07-13
<div class="quote_title">angi_sky 写道</div>
<div class="quote_div">
<p> </p>
<p>我做了一些修改</p>
<p>public static int getMax(int[][] arrays){ <br> int max = arrays[0][0]; <br> for(int i=1;i<arrays.length;i++){<br> int temp =arrays[i][0];<br> for(int j=0;j<arrays[i].length-1;j++){<br> if(temp<arrays[i][j+1]){<br> temp=arrays[i][j+1];<br> }<br> }<br> max+=temp;<br> } <br> return max; <br> } </p>
<p> </p>
<p>希望大家指点。</p>
<p>我理解题目出错。</p>
</div>
<p> </p>
<div class="quote_div">
<p> </p>
<p>我做了一些修改</p>
<p>public static int getMax(int[][] arrays){ <br> int max = arrays[0][0]; <br> for(int i=1;i<arrays.length;i++){<br> int temp =arrays[i][0];<br> for(int j=0;j<arrays[i].length-1;j++){<br> if(temp<arrays[i][j+1]){<br> temp=arrays[i][j+1];<br> }<br> }<br> max+=temp;<br> } <br> return max; <br> } </p>
<p> </p>
<p>希望大家指点。</p>
<p>我理解题目出错。</p>
</div>
<p> </p>
11 楼
angi_sky
2010-07-13
<p>楼主的getMax方法好像不正确</p>
<p>我做了一些修改</p>
<p>public static int getMax(int[][] arrays){ <br> int max = arrays[0][0]; <br> for(int i=1;i<arrays.length;i++){<br> int temp =arrays[i][0];<br> for(int j=0;j<arrays[i].length-1;j++){<br> if(temp<arrays[i][j+1]){<br> temp=arrays[i][j+1];<br> }<br> }<br> max+=temp;<br> } <br> return max; <br> } </p>
<p> </p>
<p>希望大家指点。</p>
<p>我做了一些修改</p>
<p>public static int getMax(int[][] arrays){ <br> int max = arrays[0][0]; <br> for(int i=1;i<arrays.length;i++){<br> int temp =arrays[i][0];<br> for(int j=0;j<arrays[i].length-1;j++){<br> if(temp<arrays[i][j+1]){<br> temp=arrays[i][j+1];<br> }<br> }<br> max+=temp;<br> } <br> return max; <br> } </p>
<p> </p>
<p>希望大家指点。</p>
10 楼
seele
2010-07-13
shbgreenery 写道
结果好像正确,只是看程序好像做了一些无用功
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
这样是最快的..
9 楼
braint8
2010-07-13
几乎没接触用算法,是不是很失败,咋整
8 楼
seele
2010-07-13
没有人尝试用递归么?
7 楼
xdsnet
2010-07-13
这个分解开其实就是每行的冒泡比较出最大数然后累加吧,应该是比较简单的,复杂度应该是固定值。
6 楼
shbgreenery
2010-07-13
淡夏的斌 写道
shbgreenery 写道
结果好像正确,只是看程序好像做了一些无用功
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
这段代码好像有问题的吧
有什么问题呢?难道是说没有类名和主函数名?
5 楼
kingjiang09
2010-07-13
读每行的前两位存入一个2维整形数组,不足两位用0补
int total=0;
for(int [] num:array){
if(num[0]>num[1]){
total+=num[0];
}else{
total+=num[1];
}
}
4 楼
淡夏的斌
2010-07-12
shbgreenery 写道
结果好像正确,只是看程序好像做了一些无用功
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
这段代码好像有问题的吧
3 楼
fivestarwy
2010-07-12
这个要用动规的,你用贪心显然错了,比如
5
9 6
4 6 84
0 7 1 5
应得到100
5
9 6
4 6 84
0 7 1 5
应得到100
2 楼
samwalt
2010-07-12
只看了题目,没有看代码。
用动态规划算法吧。
用动态规划算法吧。
1 楼
shbgreenery
2010-07-12
结果好像正确,只是看程序好像做了一些无用功
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
我写了一点代码,没有别的意思,只是我先抛块砖,希望能引出玉来。
String strFile = "file2.txt";
File f = new File(strFile);
int row = 0;
int col = 0;
int sum = 0;
BufferedReader reader = new BufferedReader(new FileReader(f));
for (String line = null; (line = reader.readLine()) != null;) {
String[] str = line.split("\\s+");
if (row == 0) {
sum += Integer.parseInt(str[0]);
} else {
int a = Integer.parseInt(str[col]);
int b = Integer.parseInt(str[col + 1]);
if (a > b) {
sum += a;
} else {
sum += b;
col += 1;
}
}
row += 1;
}
System.out.println(sum);
reader.close();
发表评论
-
关于数据库sharding带来的聚合问题
2010-08-03 11:18 1386当前我们的 oracle 数据库架构如下: ... -
How other's become mine?
2010-06-28 14:46 9071.实践 每一个软件开发组织都会有自己的一些经验积累 ... -
通过weblogic 9 mbean监控其应用状态
2009-11-24 16:20 2880通过weblogic开放的jmx mbean可以对部署其上的应 ... -
西湖与开源软件
2009-10-09 17:03 921西湖很美,美的让人忘记了一切烦扰 免费的西湖更美,让更多的人趋 ... -
数据库sharding(scale up to scale out)
2009-09-03 13:53 8202sharding是将一个大 ... -
项目软件架构的遐想
2009-08-22 01:23 1589做了这么多年的开发,每换一家公司(当然,也没换过几家) ... -
当敏捷碰上瀑布
2009-08-20 19:13 1135这篇文章最近才读到, ...
相关推荐
企业公司软件测试面试笔试题集合 软件测试面试题 (测试基础).doc 01_企业面试试卷(综合).doc 01_企业面试试卷(综合)_参考答案.doc 04_企业面试试卷(测试基础).doc 04_企业面试试卷(测试基础)_参考答案.doc...
软件测试是确保软件产品质量的关键环节,它涉及到一系列的测试类型、方法、工具和流程。面试中,面试官可能会考察候选...以上内容详细解释了软件测试面试题涉及的知识点,涵盖了软件测试的重要概念、过程、方法和工具。
2022年微软公司的一道软件测试师应聘面试题.docx
这些题目涵盖了多个领域的知识,包括基础数学计算、逻辑推理、编码与解码、语言学、词汇...这些题目覆盖了软件工程师面试中常见的数学、逻辑、语言理解和计算能力的考察,对于提升面试者的综合素质具有很好的参考价值。
首先,让我们来看一道常见的面试题——实现一个`strcpy`函数。`strcpy`函数在C/C++编程中扮演着基础且重要的角色,用于复制字符串。面试官可能会要求面试者现场编写这个函数,以此来评估面试者的编程基础和对内存...
"C#面试题10套" 本资源摘要信息涵盖了C#面试题10套,涵盖了C#、.NET、面试题...本资源摘要信息涵盖了C#、.NET、面试题等知识点,涉及到逻辑思维、规则应用、加密解密算法、软件架构、设计模式、数据库操作等技术领域。
在嵌入式软件工程师面试题中,一道题目是使用预处理器来计算一年中有多少秒。该题目考察了预处理器的基本知识,包括: 1. #define 语法的基本知识,例如不能以分号结束、括号的使用等。 2. 预处理器将为你计算常数...
Java面试题涵盖了许多核心知识点,包括基础技术、项目经验、逻辑推理和SQL查询。下面将对这些方面进行详细的解析。 1. **基础技术题** - **UML图**:UML(统一建模语言)有多种图表,包括类图、对象图、用例图、...
软件测试面试题面经,面试必备 软件测试是软件开发过程中的一个重要步骤,它的目的是为了确保软件的质量和可靠性。在面试中,软件测试是一道必备的题目,以下是软件测试的相关知识点: 一、测试总体 1. 软件测试...
### 软件测试面试题知识点详解 #### 1. 团队中开展软件测试的重要性 在软件开发过程中,软件测试是一项至关重要的环节。没有经过充分测试的软件很难确保其质量和稳定性,这不仅会影响用户体验,还可能导致后续维护...
本资料集合包含了20套企业面试题及相应的答案,涵盖了测试基础、理论、C语言以及综合能力等多个方面,旨在帮助准备面试的软件测试人员更好地理解和掌握核心概念,提高应聘成功率。 **测试基础** 这部分面试题主要...
《一道面试题的思考——深入理解memcpy函数的实现》 在C语言中,`memcpy`函数是一个非常重要的内存操作函数,用于将一块内存区域的数据复制到另一块内存区域。在面试中,这个问题常用来测试候选人的基础知识、逻辑...
【标题】:“软件公司面试题”通常涉及到一系列的编程题目,旨在评估候选人在软件开发中的技术能力,特别是对C语言的掌握程度。C语言是一种基础且强大的编程语言,被广泛用于系统编程、嵌入式系统、游戏开发以及各种...
### 常见的Java上机面试题:深入解析与实战指南 在IT行业的求职过程中,尤其是对于软件工程师或开发者而言,上机编程面试成为了一道必经的门槛。这种形式的面试旨在全面评估应聘者的技术能力,不仅考察理论知识的...
这是一道经典的Java面试题。解决这个问题需要了解Java的内存管理机制,包括FULL GC的触发条件、Perm Gen的设置、System.gc()方法的调用等。 Java集合框架 3. Java集合框架是Java语言中的一种重要概念,它提供了...
### 软件测试面试题大全解析 #### 1. 为什么要在团队中开展软件测试工作? 在软件开发过程中,开展软件测试是非常重要的,因为这能够确保软件在发布前达到预期的质量标准。软件测试不仅有助于识别和修复软件中的...
产品经理面试题 涉及到产品经理的多个方面,包括逻辑思维、音乐软件、音频文件格式、产品规划方案、IM 软件注册流程、产品特性和用户群体对应关系、用户行为信息的收集、产品优势和劣势分析、筷子的多种用法等。...
本篇文章将详细探讨一道经典的微软面试题——链表的反转,并通过分析其背后的逻辑和技术要点,帮助读者更好地理解和掌握这一问题。 #### 题目背景与解析 题目要求:给定一个链表的头结点,反转该链表,并返回反转...