您的位置:首页 > 其它

一些笔试算法

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

参考:编程之美
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: