要求:
/////////////////////input.txt样例////////////////////////////////
1+3/7*2=
4+2/*asjdff*/5-8=
5%2+5-2/*4=6/*i**ifdg***/*84o*/*1-2=
……………………………………… //更多表达式省略
//////////////////////////////////////////////////////////////////////////////////////output.txt样例////////////////////////////////
1+3/7*2=43
4+2/*asjdff*/*5-8=6
5%2+5-2/*4=6/*i**ifdg***/*84o*/*1-2=??
……………………………………… //更多表达式省略
/////////////////////////////////////////////////////////////
1.要求用JAVA实现。
2.若在命令行参数中指明了 input.txt 和 output.txt,请计算出input.txt中每一行表达式的值,并写入到output.txt文件中
3.2.若在命令行参数中只指明了 input.txt,则新建一个output.txt,计算出input.txt中每一行表达式的值,并写入到output.txt文件中
3.若在命令行参数中没有指明 input.txt 和 output.txt,则输入一个类似4+2/*asjdff*/*5-8这样的表达式,计算1000次这个表达式的值,在屏幕中输出结计算结果和所用时间。
4.要求最多在180分钟内完成。提示(我加的):1.可以先过滤掉表达式中的注释(/*和*/之间的东东)
/////////////////////input.txt样例////////////////////////////////
1+3/7*2=
4+2/*asjdff*/5-8=
5%2+5-2/*4=6/*i**ifdg***/*84o*/*1-2=
……………………………………… //更多表达式省略
//////////////////////////////////////////////////////////////////////////////////////output.txt样例////////////////////////////////
1+3/7*2=43
4+2/*asjdff*/*5-8=6
5%2+5-2/*4=6/*i**ifdg***/*84o*/*1-2=??
……………………………………… //更多表达式省略
/////////////////////////////////////////////////////////////
1.要求用JAVA实现。
2.若在命令行参数中指明了 input.txt 和 output.txt,请计算出input.txt中每一行表达式的值,并写入到output.txt文件中
3.2.若在命令行参数中只指明了 input.txt,则新建一个output.txt,计算出input.txt中每一行表达式的值,并写入到output.txt文件中
3.若在命令行参数中没有指明 input.txt 和 output.txt,则输入一个类似4+2/*asjdff*/*5-8这样的表达式,计算1000次这个表达式的值,在屏幕中输出结计算结果和所用时间。
4.要求最多在180分钟内完成。提示(我加的):1.可以先过滤掉表达式中的注释(/*和*/之间的东东)
解决方案 »
- java 线程锁的问题
- java基础,容器里面添加引用
- java的方法能不能传递过程(或者方法名、函数名)参数???
- 求助 关于java程序的一个小错误!哪位大哥帮帮忙
- JAVA J2EE EJB JAVABEAN 究竟有什么关系
- 问一个Swing做界面算是设计模式方面的问题,语言上应如何去实现
- 急问,各位jdom是否可以支持中文汉字呀!我的不能,是不是还需要另外的和插件呀!
- 请教,鼠标与菜单不对应,该怎么办?谢谢
- 已知字符串,怎样附值给同名控件(用JScript)?
- 这是THINK IN JAVA 上的例子,为什么会出错,帮忙看看
- java怎么求64位随机数.
- 急求一书——Java2教程(第五版)!!!
建立一个表达式优先级线性表,如+-/%*()等
建立一个源数组
建立一个结果数组
1 IO操作将每一行读入数组,
1.1 使用正则替换注释。
1.2 逐个把此行的每个操作符(数)压栈。
1.3 压栈优先级相等时计算,并将结果存入结果数组2 IO操作建文件。
2.1将源数组的每一行+结果每一行写入文件的每一行完毕。真的很简单,华为让我很失望。
既然是比武,就应该这样,都是hello world还比什么?能够又快又正确的完成这类题的人,才是真正的强。说这些是垃圾的人永远都是coder.
有没有平方之类的?
如果只是要实现,不计较算法的话,我想可以在JAVA里面读文件,然后输出一个JAVA文件,里面有这句表达式,然后编译运行出结果,读输出后写入文件.
《华为员工加班之死》
http://info.china.alibaba.com/news/detail/v5003013-d5714028.html
bsh.Interpreter itpt = new bsh.Interpreter();System.out.println(itpt.eval(表达式));
这个是纯粹得编译
用java就是外行做这个题目
应为没有人会用java写编译器
但是就数据结构方面训练一下
还是可以得
不知道javascript中的eval是用什么结构实现的,也是栈么?
实现一个这样的方法,然后每读取一行用正则表达式替换后,就调用一下。
180分钟的时间,有点紧。
要做出来很简单但是说什么最好的java测试题就错了,这应该说是数据结构方面的测试!
eval 不是一句搞定?
华为缺的是 系统分析师和软件架构师,号称通过最牛的CMM5认证,可是问问你们那帮coder,什么是需求采集,他们知道么?
建议你们每月的大比武去比这些,而不要适得其反。
华为的软件,用过了,那不是一个晕字吐字了得,那是一个疯啊!
java应该是南研所这帮清华的高人在搞,还美其名曰多媒体业务开发,其实就是一帮高手被关在互不相通的屋子里闭门造车! 华为,你还是把软件外包了让别搞去吧,虽然印度没有搞定,但国内能给你打工的软企应该不少,何必干这种费力费财费人又不讨用户好不讨订单好不讨自己钱包好的事! 我只能用一个不懂软件的老头的话总结华为的软件:华为搞硬件出身,搞软件怕是有点自欺欺人!
1. 清除注释
2. 构建二叉树,分解计算因子
3. 实现计算过程
4. 将结果写入output文件不过偶水平低,花不起那么多时间,用第三方控件啦^_^
数据结构---->栈--->计算结果
Java文件操作
不过说一下,很多华为的员工 都跳到我们公司。因我们从不用加班。using System;
using System.Collections.Generic;
using System.Text;namespace ConsoleStudy
{
public class Arithmetic
{
public static int CalcIt(string input)
{
List<string> inputs = split(input);
while (inputs.Count > 1)
{
inputs = CalcBody(inputs);
}
return int.Parse(inputs[0]);
} private static List<string> CalcBody(List<string> inputs)
{
Stack<string> stack = new Stack<string>(); CommandChar preCom = new CommandChar(' ');
foreach (string c in inputs)
{
if (isOper(c))
{
CommandChar cc = new CommandChar(c[0]); if (CommandChar.BjPri(preCom, cc) >= 0)
{
string n2 = stack.Pop();
string o = stack.Pop();
string n1 = stack.Pop();
string r = Arithmetic.calc(n1, o, n2); stack.Push(r);
} stack.Push(c);
preCom = cc;
}
else
{
stack.Push(c);
}
}
inputs.Clear(); if (stack.Count > 3)
{
while (stack.Count > 0)
{
inputs.Add(stack.Pop());
}
}
else
{
string n2 = stack.Pop();
string o = stack.Pop();
string n1 = stack.Pop();
string r = Arithmetic.calc(n1, o, n2); inputs.Add(r);
} return inputs;
} public static List<string> split(string input)
{ List<string> ls = new List<string>();
string s = string.Empty;
foreach (char c in input)
{
if (isOper(c))
{
if (s != string.Empty)
{
ls.Add(s);
s = string.Empty;
}
string o = string.Empty;
o += c;
ls.Add(o);
}
else
{
s += c;
} } ls.Add(s);
return ls;
} private static string calc(string n1, string Op, string n2)
{
int i1 = int.Parse(n1);
int i2 = int.Parse(n2);
int r = 0;
switch (Op)
{
case "+":
{
r = i1 + i2;
break;
}
case "-":
{
r = i1 - i2;
break;
} case "*":
{
r = i1 * i2;
break;
}
case "/":
{
r = i1 / i2;
break;
} } return r.ToString();
} private static bool isOper(char c)
{
if (c == '+' || c == '-' || c == '*' || c == '/')
{
return true;
}
else
{
return false;
}
} private static bool isOper(string c)
{
return isOper(c[0]);
} }
}
要完全实现试题,180分钟够呛!http://bugonline.net 在线的BUG管理系统
using System.Collections.Generic;
using System.Text;namespace ConsoleStudy
{
class Program
{
static void Main(string[] args)
{
string input = string.Empty;
while (true)
{
input = Console.ReadLine(); //"1+2+3*4"; if (input == "q")
{
break;
}
else
{
int res = Arithmetic.CalcIt(input);
Console.WriteLine(res);
}
}
} } class CommandChar
{
char cmdType = ' '; public char CmdType
{
get { return cmdType; }
//set { cmdType = value; }
}
public CommandChar(char s)
{
cmdType = s;
} public int Pri
{
get
{
switch (cmdType)
{
case '+':
return 1;
case '-':
return 1;
case '*':
return 2;
case '%':
return 2;
default:
return 0;
} }
} public static int BjPri(CommandChar c1, CommandChar c2)
{
return c1.Pri - c2.Pri;
} }}
用得着那么费事吗?
eval 不是一句搞定?
坚决同意,东西就是为了简单才写的.
eval 不是一句搞定?--
eval 本身也要人编的,呵呵.这是检查基本功,上次去ms, 第一道题就是不能用string.Split() 和 stack,把一句话按单词倒过来 还要最省内存,这其实不就是要你编Split()函数和stack吗?http://bugonline.net 在线的BUG管理系统
/////////////////////input.txt样例////////////////////////////////
1+3/7*2=
4+2/*asjdff*/5-8=
5%2+5-2/*4=6/*i**ifdg***/*84o*/*1-2=
……………………………………… //更多表达式省略
//////////////////////////////////////////////////////////////////////////////////////output.txt样例////////////////////////////////
1+3/7*2=43
4+2/*asjdff*/*5-8=6
第一个表达式1+3/7*2=43,我怎么算也算不出等于43啊,如果都是int型,觉的应该是:1+3/7*2=1啊,
第二个表达式4+2/*asjdff*/5-8=,怎么就多了个“*"啊,4+2/*asjdff*/*5-8=6难道程序有自动添加计算符的功能
操作系统,中间件,数据库,cpu这些是一个国家必须要做的。
而且,也正在做,你不知道而已。
你不懂就算了,不会就算了,什么叫从来没有人做出来过?只是你见过的人里面没有人做出来过!你再想想,所谓的脑子,分析和逻辑能力全是扯淡,只有你能做别人做不了的东西,你才会有价值。像这些jsp/struts,有多少人会,入门又多么的容易,那么工资又怎么能高?日子又怎么能好?所谓的系统设计,这些是个人给他几年时间混也混成了。而又多少东西,是混不成的,这些才是提升砝码的东西。