主题:[原创]求2道题的解法。是我的培训作业!
wm5081190
[专家分:0] 发布于 2007-04-03 19:44:00
1、读入一个算术表达式,以“;”结束,对该表达式中的圆括号是否配对,进行检查,要求:给出正确与错误的信息。若出错还应指出是左括号多于右括号,或是右括号多于左括号,或是先出现了右括号。
2、有一已排序的数组,现要求输入一个数,要求,按原来的排序规则,将它插入数组中。
请各位高手给出答案。
回复列表 (共11个回复)
沙发
编程黑客 [专家分:1660] 发布于 2007-04-03 21:44:00
第二题可以用个偷懒的算法:
就是开个比较大数组,然后把原来已经排好序的N个数存到1..N里,再把要插入的数据存到N+1里,然后把1..N+1进行排序就行了
这样就不用再给要插入的数据来找它的位置了,比较简单,但不是出题者想要你用的算法
程序的代码很简单,不用我写了吧,其实主体也就是个排序的程序
板凳
bigchen [专家分:1940] 发布于 2007-04-04 12:21:00
第一题应该用栈
3 楼
wm5081190 [专家分:0] 发布于 2007-04-04 19:14:00
老大啊,我就是不会写,才找大家帮忙的啊。我们就培训了4天,然后就留了这2个作业。其实我连基本的程序都不会写呢。请您把完整的程序写出来好吗?
谢谢,谢谢,谢谢!
4 楼
bigchen [专家分:1940] 发布于 2007-04-04 21:42:00
var
a:array[1..500] of integer;
m,n,i,j,k:integer;
begin
readln(m);
for i:=1 to m do read(a[i]);
readln(n);m:=m+1;a[m]:=n;
for i:=1 to m-1 do
for j:=i+1 to m do
if a[i]>a[j] then
begin
k:=a[i];a[i]:=a[j];a[j]:=k;
end;
for i:=1 to m do write(a[i],' ');
end.
5 楼
bigchen [专家分:1940] 发布于 2007-04-04 21:48:00
var
s:string;t:char;
l,i,j,k,l,top:integer;
a:packed array[1..500] of char;
begin
l:=0;
while not(eoln) do
begin
read(t);
if ((t='(') or (t=')')) then
begin
l:=l+1;s[l]:=t;
end;
end;
for i:=1 to l do
begin
if s[l]='(' then
begin
top:=top+1;
a[top]:='(';
end
else
top:=top-1;
if top<0 then
begin
writeln('NO');
exit;
end;
end;
writeln('YES');
end.
6 楼
bigchen [专家分:1940] 发布于 2007-04-04 21:49:00
估计语法上面会有点小问题
但算法应该没有问题的!
7 楼
bigchen [专家分:1940] 发布于 2007-04-05 08:19:00
提示两件事情:
1、加分
2、程序就是要自己去想,自己去做
而不是总是请教别人
8 楼
游侠UFO [专家分:1200] 发布于 2007-04-07 21:53:00
第一题应该用栈的基本操作就可以实现:遇到一个正括号就入栈,遇到一个反括号就弹出栈顶元素.最后看是否剩余元素就能判断是哪种括号没配对了.
第二题就是简单的插入排序.
9 楼
mickeyice [专家分:200] 发布于 2007-04-17 13:32:00
1.依次从左到右读取字符串中的 字符 如果是'('那么 t=t+1 如果是')'那么t=t-1.每次都判断t 的值如果t 出现负值那么说明先出现了')',如果最后t>0那么说明')'过多.(t 初值为0)
2.依次判断数组中各元素和n的大小插入 如果出现了第i个元素和第i+1个元素和n 的大小关系不一直那么就插到i+1的位置,数组向后移位.
可能出现插在第一个或者最后一个的特殊情况.
ps 4天可以做很多事情了,别人问我我不懂的asp 我看了2小时就给答复了,虽然我到现在还是不很清楚
10 楼
游侠UFO [专家分:1200] 发布于 2007-05-04 17:28:00
[quote]1.依次从左到右读取字符串中的 字符 如果是'('那么 t=t+1 如果是')'那么t=t-1.每次都判断t 的值如果t 出现负值那么说明先出现了')',如果最后t>0那么说明')'过多.(t 初值为0)
2.依次判断数组中各元素和n的大小插入 如果出现了第i个元素和第i+1个元素和n 的大小关系不一直那么就插到i+1的位置,数组向后移位.
可能出现插在第一个或者最后一个的特殊情况.
ps 4天可以做很多事情了,别人问我我不懂的asp 我看了2小时就给答复了,虽然我到现在还是不很清楚[/quote]
第一个算法不错,不像我那个用栈.既费空间又费时间,呵呵
PS 有程序基础的人4天的确能干很多和程序有关的事情,如果才开始接触程序恐怕没这么容易吧?
我来回复