回 帖 发 新 帖 刷新版面

主题:这些题对我来说太难了,难不倒的就帮忙啊

编写程序
1.对于一个多项式,我们可以这样表示:
y=a1x^b1+a2x^b2+a3x^b3+a4x^b4+......anx^bn,可以约定b1,b2,b3......bn从大到小排列,且a1,a2......an均不为0.求任意两个多项式的和.
2.做一个加法器.完成30000以内的加法,两个加数间用"+"连接,可以连加,回车表示式子输入完成;"#"表示结束运算,退出加法器.

3.将1--9这9个数字分成3组(每个数字只能使用一次),分别组成3个3位数,且这3个3位数构成1:2:3的比例,试求出所有的情况.

4.已知数组a中含有n个整形元素,求a中有多少个最大数?多少个次大数?.......多少个互不相等的数?编程实现之.

5.输出集合M的最小的n个数,集合中数据特点如下:

(1)1属于M               (2)假设x属于M,则有2x+1属于M,3x+1属于M         (3)再无别的数属于M

回复列表 (共6个回复)

沙发

没错,就是难!

板凳

1、如果a、b直接读入,那么就把b相同的a累加,最后输出就可以了
2、字符串操作,结合pos、copy、val、delete逐个数提取出来计算
3、深搜吧,搜9层,每层循环1~9,搜到第9层时验算一下就行了
4、循环一次,记录最大值,次大值,和两个统计变量;当找到一个最大值或次大值时记录一下,当找到一个比最大值还大的数,则最大值赋给次大值,更新最大值和统计变量,当找到一个比次大值大而比最大值小的数则更新次大值信息即可
5、把1加入数组,然后循环数组,把数组的值×2+1、×3+1得出的值加入数组,一直循环到数组第n个元素,然后输出

3 楼

无奈我无师授课,请2楼的朋友再详细说说.最好把源程序写出来.
对了,最近没见口口啊,谁知道他去哪了??

4 楼

建议楼主自己慢慢参透,一味问别人拿程序是不好的习惯……
不过确实不会的话我们也会帮你的……

5 楼

第一题:用队列做
第二题:堆栈吧
第三题:呵呵,我有现成的,给你贴了!
program shuzi;
var i,j,k,l:integer;
    a:array[1..234,1..3]of integer;
procedure panduan(x:integer);
var n1,n2,n3,n,y:integer;
    b:array[1..3,1..9]of byte;
    m:char;
    s1,s2,s3:string[3];
begin
   str(a[x,1],s1);str(a[x,2],s2);str(a[x,3],s3);
   for m:='1' to '9' do
   begin
     val(m,n);
     n1:=pos(m,s1);n2:=pos(m,s2);n3:=pos(m,s3);
     b[1,n]:=n1;b[2,n]:=n2;b[3,n]:=n3;
   end;
     for n:=1 to 9 do
     if (((b[1,n]=1) or (b[1,n]=2) or (b[1,n]=3)) and
     ((b[2,n]=1) or (b[2,n]=2) or (b[2,n]=3))) or
     (((b[1,n]=1) or (b[1,n]=2) or (b[1,n]=3)) and
     ((b[3,n]=1) or (b[3,n]=2) or (b[3,n]=3))) or
     (((b[3,n]=1) or (b[3,n]=2) or (b[3,n]=3)) and
     ((b[2,n]=1) or (b[2,n]=2) or (b[2,n]=3))) then
     for y:=1 to 3 do a[x,y]:=0;
     if (s2[1]=s2[2]) or (s2[2]=s2[3]) or (s2[1]=s2[3]) then a[x,1]:=0;
     if (s1[1]=s1[2]) or (s1[2]=s1[3]) or (s1[1]=s1[3]) then a[x,1]:=0;
     if (s3[1]=s3[2]) or (s3[2]=s3[3]) or (s3[1]=s3[3]) then a[x,1]:=0;
     for n:=1 to 3 do
     begin
       if s1[n]='0' then a[x,1]:=0;
       if s2[n]='0' then a[x,1]:=0;
       if s3[n]='0' then a[x,1]:=0;
     end;
end;
begin
  for i:=100 to 333 do
  for j:=200 to 666 do
  for k:=300 to 999 do
  if (k mod i=0) and (j mod i=0) and (k div i=3) and (j div i=2) then
  begin
    a[i-99,1]:=i;a[i-99,2]:=j;a[i-99,3]:=k;
  end;
  for l:=1 to 234 do panduan(l);
  for l:=1 to 234 do
  if a[l,1]<>0 then
  begin
    write(a[l,1]:5,a[l,2]:5,a[l,3]:5);
    writeln;
  end;
end.

这是种笨办法!不建议采用!1!!!!
自己学吧,没有老师,自学成才!!!

6 楼

好好学习,天天向上!偶跟你一起学。。。

这不会死作业,你偷懒吧~

我来回复

您尚未登录,请登录后再回复。点此登录或注册