Algorithm 版 (精华区)
发信人: ssos (存在与虚无·英雄无敌), 信区: Algorithm
标 题: [合集]帮偶解解这个
发信站: 哈工大紫丁香 (2002年01月24日08:45:21 星期四), 站内信件
────────────────────────────────────────
rainy (段誉) 于 2001年11月21日19:50:22 星期三 说道:
初中生竞赛的题目,题目好多,谁帮我做一个?
剩下的我自己做
输入一个一元一次方程,输出它的解
例如输入6a-5+1=2-2a
输出a=0.750
方程不带括号
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月21日19:56:53 星期三 说道:
这个不带括号还用做吗?
────────────────────────────────────────
davidchang (被pass了) 于 2001年11月21日20:18:32 星期三 说道:
老大
这个你都不会,俺们怎么会呀
grin
────────────────────────────────────────
rainy (段誉) 于 2001年11月21日20:20:03 星期三 说道:
不帮就算啦,取笑什么
只不过题目多一点,偶自己花点时间解呗
有什么了不起的
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月21日21:15:55 星期三 说道:
哈哈,开玩笑的
要方法还是要源程序?
────────────────────────────────────────
gosirius (必宿五) 于 Thu Nov 22 17:25:48 2001) 说道:
void main()
{
char s[MAX];
────────────────────────────────────────
gosirius (必宿五) 于 Thu Nov 22 17:40:44 2001) 说道:
void main()
{
char s[MAX];
int a,b;
scanf("%s",s);
int n=0;
int f=1;
int m=0
while(s[n]!='\0')
{
swich(s[n])
{
case '0':
case '1'
.
.
.
m=(m*10+(s[n]-46));
break;
case '+':
b=b+f*m;
m=0;
break;
case 'a':
a=a+f*m
m=0;
n++
break;
case '=':
f=-1;
}
n++
}
printf("\n%f",-(float)b/(float)a);
}
以上是一个简化版本,系数只能是整数,可能还有很多错误,但大概思路应该能看懂吧?
────────────────────────────────────────
lizhenguo (夸父·追日) 于 2001年11月22日17:59:10 星期四 说道:
程序不错,但漏了减号和负号两种情况。
────────────────────────────────────────
gosirius (必宿五) 于 Thu Nov 22 18:02:34 2001) 说道:
现写的,没太注意,还请各位大虾不要介意。
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月22日18:42:52 星期四 说道:
haha,受我启发了吧
────────────────────────────────────────
lizhenguo (夸父·追日) 于 2001年11月23日07:44:01 星期五 说道:
根据gosirius的思路,我写了一个完整程序。在Delphi 5.5上运行通过
program equation;
{$APPTYPE CONSOLE}
uses SysUtils;
var
s:string;
num:real;
flag1,flag2:shortint;//flag1---是否在等号右边标志,flag2---该项是否为负标志
flag3:boolean;//是否在小数点后面标志
left,right:real;//left---a的系数
i:integer;
begin
flag1:=1;
flag2:=1;
flag3:=false;
num:=0;
left:=0;
right:=0;
readln(s);
for i:=1 to length(s) do
begin
if s[i] in ['0'..'9'] then
begin
if flag3 then num:=num+strtoint(s[i])/10
else num:=num*10+strtoint(s[i]);
end;
case s[i] of
'.':flag3:=true;
'+':
begin
right:=right+num*flag1*flag2;
num:=0;
flag2:=1;
flag3:=false;
end;
'-':
begin
right:=right+num*flag1*flag2;
num:=0;
flag3:=false;
flag2:=-1;
end;
'=':
begin
right:=right+num*flag1*flag2;
flag1:=-1;
flag2:=1;
flag3:=false;
num:=0;
end;
'a':
begin
if num=0 then left:=left+1
else left:=left+num*flag1*flag2;
num:=0;
flag2:=1;
flag3:=false;
end;
end;
end;
right:=right+num*flag1*flag2;
writeln('The answer is:',-right/left);
readln;
end.
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月23日10:22:53 星期五 说道:
警告,不要在算法版发表源程序(这么烂的)
────────────────────────────────────────
fobcaesar (温泉企鹅) 于 2001年11月23日10:42:39 星期五 说道:
嘿嘿!
Lerry是不是没有写出来呀?
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月23日14:15:21 星期五 说道:
你个笨笨,我的程序你不是看过了吗?KICK
────────────────────────────────────────
fobcaesar (温泉企鹅) 于 2001年11月23日14:18:20 星期五 说道:
呵呵!我这里也有一个,不过太长了!
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月23日19:27:43 星期五 说道:
哈哈,我还以为你编程序不罗嗦了呢,这么简短
原来你的程序什么都解决不了
连优先级都没有,没有括号又不表示没有乘除号
────────────────────────────────────────
lizhenguo (夸父·追日) 于 2001年11月23日20:00:07 星期五 说道:
呵呵,我只是针对他给的数据给出程序。
你把你的程序贴出来让大家欣赏欣赏?
────────────────────────────────────────
Lerry (戒网·学习) 于 2001年11月23日20:03:43 星期五 说道:
现在没空,再说我编过了,不想再编做过的程序
────────────────────────────────────────
lizhenguo (夸父·追日) 于 2001年11月23日20:31:01 星期五 说道:
~~~~~~
────────────────────────────────────────
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.477毫秒