两道我的钢琴很简单单的题

两道很简单的JAVA习题,可惜我不会做,求大神?! - 知乎1被浏览359分享邀请回答expr —& term + expr | term - expr | term
term —& factor * term | factor/term | factor
factor—& digit |(expr)
‘—&’的意思是’由...组成’,’|’ 代表’或关系’,expr 代表加减法运算式,term 代表乘除法运算式,factor 代表操作的最小元素,最后一句的意思就是 factor 由数字或者带括号的 expr 组成。这三个定义式是递归的,它可以代表任意深度的算式。让我们用树的形式来观察一下,有了这三种抽象对象我们可以写出对应方法了,我们在parser类里定义三个函数,来代表三种对象的产生过程,并且定义char类型变量head代表正在被扫描的字符。public class Scanner {
//执行入口
public static void main(String[] args) {
Scanner scanner = new Scanner("1+1+(3+4)-2*3+8/2");
Parser parser = scanner.new Parser(scanner);
parser.parse();
private char[]
private int index = 0;
public static char END = '\n';
public Scanner(String source){
this.source = source.toCharArray();
public char getNext(){
if (index &= source.length){
return END;
result = source[index];
index += 1;
}while (Character.isWhitespace(result));
class Parser {
public Parser(Scanner scanner){
this.scanner =
public void parse(){
if (Scanner.END != (head = scanner.getNext())){
if (head != Scanner.END){
throw new RuntimeException("syntax error at "+head);
public int expr(){
int result = term();
while ((operate = head) == '+' || operate == '-') {
head = scanner.getNext();
tempResult = term();
switch (operate) {
System.out.println(result + "+" + tempResult + "=" + (result + tempResult));
result += tempR
System.out.println(result + "-" + tempResult + "=" + (result - tempResult));
result -= tempR
public int term(){
int result = factor();
while ((operate=head) == '*' ||operate == '/') {
head = scanner.getNext();
tempResult = factor();
switch (operate) {
System.out.println(result + "*" + tempResult + "=" + (result * tempResult));
result *= tempR
System.out.println(result + "/" + tempResult + "=" + (result / tempResult));
result /= tempR
public int factor(){
if (Character.isDigit(head)){
factor = head - 48; //字符变量-48可以转换成对应的字面数字
head = scanner.getNext();
match('(');
factor = expr();
match(')');
public boolean match(char symbol){
if (symbol == head){
head = scanner.getNext();
throw new RuntimeException("syntax error at "+head);
对于第二个问题,将两个字符串拆分成字符数组,然后迭代比较输出就行了,比较简单就不写了。21 条评论分享收藏感谢收起2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。已收藏本页面
这道题看似简单,实则难度很大,小编做了两个小时了,还是没有眉目。智商在160以上的网友,快来算答案吧!
智商160的人会跟你玩这个?
草我以为多难,第一次就解出来了
回复 42楼:看准题,好不好
回复 45楼:5+7怎么不能除以三
正确应为第一行为2,11,9,第二行为4,1,0,第三行为2,7,5。
第一行,5。8。9第二行,7。6。4。第三行3。2。1
我个人认为是不按先乘除后加减,数字必须1~8,结果是横向第一行5.8.
3分钟算出来的,第一排1,12,9。第二排11,10,4。第三排3,2,1。完毕
回复 7楼:膜拜7楼
如果只是整数的话,在右下角填个5,那么就能快速推出答案了。
0-100之间的整数,只有28楼牛人的答案。为这个特意写了个程序来计算。至于小数的话答案就无穷了
回复 38楼:7能除以3吗?还写答案
10以内的话无解
回复 33楼:懂基本加减乘除法吗?
横竖都是死啊[笑着流泪]
这就一个按顺序算的题,还括号
别发了 臭显摆 算术基本先后没搞清就发
回复1楼 难道不是先乘除后加减吗?
回复 32楼:589 764 321
第一排769第二排951第二排444
没有好友。这软件怎么玩的啊[大哭][大哭]
回复29楼:试一下就知道了
回复 8楼:加减乘除在一起没有括号先算乘除
第一行2、11、9,第二行4、1、0,第三行2、7、5
多元一次方程。。。是个初中生就会
妹的,十分钟搞定了
回复 7楼:666
回复 1楼:加减乘除 先乘除不知道吗
第一排949,第二排731,第三排444
我是来看评论的
先算乘除,后算加减。
没算出来~来个大神
回复 8楼:你说的不对
有乘除的居然先算加减
如果只看题的话,六个方程解八个未知数,理论是无穷多个解,不知道对不对,随便令四个未知数为任意值,都可以解出剩下未知数
两分钟做完,第一行10
第三行3 2 1
+11-9第二排4-1×0第三排2+7-5
这算数,气死体育老师了。谁教的8+4÷3=4?那是等于9.333……这题填0~9是无解的。
老子看这图的时候 你妈连爱都没做过
运算顺序是按照先乘除后加减吗
回复 2楼:不知道,我先算第一行的,然后下边都能算出来了
回复 1楼:你确定乘除法不用在加减法之前算
后才能发表评论
你可能喜欢的图片笑话
最受欢迎的爆笑笑话扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
两道简单的数学题.要详细的过程!1.若点(-4,0),(0,5),(m,2)在同一条直线上,求m
.2.直线y=kx+b与y轴交点B(0,-4),与x轴交与点A,若 三角形OAB的面积为6,求k,b
扫二维码下载作业帮
2亿+学生的选择
第一个!根据前两个点求出直线解析式:y=1.25x+5然后把第三个假点代入,可以求出m=-2.4第二个~!因为S三角形ABC=6所以OB=6*2/4=3所以A(3,0) A(-3,0)所以根据点B可以求出两个解析式y=-4/3x-4 y=4/3x-4
其他类似问题
扫描下载二维码智力题:两道简单的数字题,却让无数高智商费神!
有些人善于解决难题,有些人善于解决简单的问题。有很多高智商,难题可以轻松应对,有时反而是简单的题让他们失了“前蹄”。当然,智商是无可厚非的,或许正是因为简单,反而大意,看错了关键。
下面两道都是与数字有关的题,智力题高手应该经常见到,完成应该不难。但是却有很多人答错了,可能正是由于简单,才让他们读题大意,错误理解了题意!你快来看看能不能完成吧
1、在下面这个图形中,从顶部开始顺时针填入数学符号(+、-、×、÷)使位于图形中间的数字答案成立!计算时忽略先乘除后加减的规则,依次计算即可,你能办到吗?
2、如果叶子的值是6,你能计算出其他符号的值吗?
欢迎大家分享答案,切磋思维哦!
微信公众号:IQ测试与训练【IQtest818】,每日更新智力题及答案,让你越玩越聪明
责任编辑:
声明:本文由入驻搜狐号的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
这样的智力题,你还在晕的时候,高智商已经给出了答案!
小学生智力题,家长的惯性思维,未必有正解!
今日搜狐热点}

我要回帖

更多关于 幸福很简单的经典句子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信