一些笔试算法
2013-11-27 21:33
267 查看
1.数组中的数分为两组,让给出一个算法,使得两个组的和的差的绝对值最小
数组中的数的取值范围是0<x<100,元素个数也是大于0, 小于100比如a[]={2,4,5,6,7},得出的两组数{2,4,6}和{5,7},abs(sum(a1)-sum(a2))=0;
比如{2,5,6,10},abs(sum(2,10)-sum(5,6))=1,所以得出的两组数分别为{2,10}和{5,6}。
package arithmetic; /** * 通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。 输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。 补充说明: 1. 操作数为正整数,不需要考虑计算结果溢出的情况。 2. 若输入算式格式错误,输出结果为“0”。 要求实现函数: void arithmetic(const char *pInputStr, long lInputLen, char *pOutputStr); 【输入】 pInputStr: 输入字符串 lInputLen: 输入字符串长度 【输出】 pOutputStr: 输出字符串,空间已经开辟好,与输入字符串等长; 【注意】只需要完成该函数功能算法,中间不需要有任何IO的输入输出 示例 输入:“4 + 7” 输出:“11” 输入:“4 - 7” 输出:“-3” 输入:“9 ++ 7” 输出:“0” 注:格式错误 * @author hasee * */ public class Arithmetic { public static void main(String[] args) { char[] in = "9 ++ 7".toCharArray(); char[] out = new char[5]; arith(in, out); for (char c : out) { System.out.print(c); } System.out.println(); } public static void arith(char[] in, char[] out){ try { //错误!!没有考虑每一步都有可能数组越界 if (in==null||out==null) return; int index=0; int a,b; char sign; //计算a,各种检查 if (in[index]<'0'||in[index]>'9') { out[0] = '0'; return; } a = in[index++] - '0'; if (in[index]!=' ') { if (in[index]<'0'||in[index]>'9') { out[0] = '0'; return; } a = a*10 + in[index++]-'0'; } //空格 if (in[index] != ' ') { out[0] = '0'; return; } index++; //sign符号 if (in[index] != '+' && in[index] != '-') { out[0] = '0'; return; } sign = in[index++]; //空格 if (in[index] != ' ') { out[0] = '0'; return; } index++; //b数字计算,各种检查 if (in[index]<'0'||in[index]>'9') { out[0] = '0'; return; } b = in[index] - '0'; //错误! 没有考虑数组过界,这种情况越界不算错误,10以下的时候 if (in.length-1 > index) { index++; if (in[index]!=' ') { if (in[index]<'0'||in[index]>'9') { out[0] = '0'; return; } b = b*10 + in[index]-'0'; } } //计算最终结果 int c; if (sign == '+') c = a+b; else c = a-b; //错误!!没有考虑String.valueOf(c).toCharArray()返回的新对象, //out为临时指针,函数完了就销毁。 char[] temp = String.valueOf(c).toCharArray(); for (int i = 0; i < temp.length; i++) { out[i] = temp[i]; } return; } catch (ArrayIndexOutOfBoundsException e) { out[0] = '0'; return; } } }
View Code
参考:编程之美
相关文章推荐
- 一些笔试常考简单算法小结
- 我在北京找工作(四):java实现递归<1> 一些笔试题+常见算法
- 最进2011校招笔试中遇到的一些算法c语言的
- 笔试中遇到的一些算法问题
- 一些重要的算法
- 计算阶乘的另一些有趣的算法
- java的一些特殊数字算法
- 【笔试基础】页式存储管理问题一些习题
- 一些基础算法(2)
- 2016年头条校招笔试(LRU算法)
- CYGWIN BUILD exe方法。比较适合尝试一些小的算法
- 名企笔试:百度2015春季实习生(01排序) 2017-04-06 算法爱好者
- 计算机视觉中经常需要识别或者定位某些几何图形,比如直线、圆、椭圆,还有其他一些图形。检测直线的霍夫变换提供了在图像中寻找直线的一种算法,是最简单的一种情形,后来发展到检测圆、椭圆、还有一般图形的霍夫变
- 对皮肤美白算法的一些研究。
- 话说NOIP一些会考到的算法
- 笔试面试算法经典--动态规划-最大子矩阵和(Java)
- [Paper Test 1]一些数学的小型算法题
- 收集一些top软件公司经典算法面试题
- 一些算法题
- DFS算法和一些实例