题解

111 条题解

  • 0
    @ 2009-09-21 23:01:56

    汗,字符串果然要仔细考虑.

    这种递归都交2次才过

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-09-17 20:30:07

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    囧!

    交了n编,都90分!

    看了楼下大牛的题解,发现用换底公式求n次幂居然会有精度误差!

    吃一堑长一智!

  • 0
    @ 2009-09-17 09:57:57

    递归做得。说实话,自己都过得稀里糊涂的,改着改着就过了...

    var i,j,k,n:integer;m:real;

    a:array[0..15]of real;

    procedure dg(x:real);

    var i:integer;x1,x2:real;

    begin

    i:=15;

    repeat

    dec(i);

    if x>=a[i] then begin x1:=a[i];x2:=x-a[i];;end

    until x>=a[i];

    if i=1 then

    begin

    if x2=0 then write('2') else write('2+')

    end

    else

    begin

    write('2(');

    if i>2 then dg(i)else write(i);

    if x2=0 then write(')') else write(')+');

    end;

    if x2>0 then

    begin

    j:=i;

    repeat

    dec(j);

    until x2>=a[j];

    dg(x2)

    end;

    end;

    begin

    readln(m);

    for i:=0 to 14 do

    a[i]:=exp(i*ln(2));

    dg(m);

    end.

  • 0
    @ 2009-09-16 19:53:55

    赞楼下lzylzylzy的题解

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    真应该好好学习,背过了

  • 0
    @ 2009-08-29 17:34:21
    • -用暴力数组,比写递归容易- -,不过猥琐了点
  • 0
    @ 2009-08-28 08:29:45

    program v1597;

    var a:array[1..20000] of longint;

    s:longint;

    k:boolean;

    procedure de(s:longint; var u:boolean);

    var i:longint;

    can:boolean;

    begin

    for i:=15 downto 0 do

    begin

    if s shr i=0 then continue;

    if i>2

    then begin

    write('2','(');

    can:=false;

    de(i,can);

    write(')');

    if (s and ((1 shl i)-1))0 then write('+');

    end

    else begin

    if u then write('+')

    else u:=true;

    if i=1 then write('2')

    else write('2','(',i,')');

    end;

    s:=s and ((1 shl i)-1);

    end;

    end;

    begin

    readln(s);

    k:=false;

    de(s,k);

    writeln;

    end.

    用了一点位运算……

  • 0
    @ 2009-08-25 17:09:51

    超级递归

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var n,i,j:longint;

    s:ansistring;

    function ss(q:longint):ansistring;

    var i,j:longint;

    s1,s2:ansistring;

    begin

    if q=2 then exit('2');

    if q=1 then exit('2(0)');

    if q=0 then exit('');

    i:=1;j:=0;

    while i

  • 0
    @ 2009-08-24 17:36:50

    program power(input,output);

    var er:array [0..15] of longint;

    i,shu:longint;

    boo:boolean;

    procedure cl(shu:longint);

    var i,x:longint;

    begin

    if shu

  • 0
    @ 2009-08-21 20:11:53

    const int a[15]={1,2,4,8,16,32,64,128,256,512,1024,2048,4096,8192,16384};

    const string s[15]={ "2(0)",

    "2",

    "2(2)",

    "2(2+2(0))",

    "2(2(2))",

    "2(2(2)+2(0))",

    "2(2(2)+2)",

    "2(2(2)+2+2(0))",

    "2(2(2+2(0)))",

    "2(2(2+2(0))+2(0))",

    "2(2(2+2(0))+2)",

    "2(2(2+2(0))+2+2(0))",

    "2(2(2+2(0))+2(2))",

    "2(2(2+2(0))+2(2)+2(0))",

    "2(2(2+2(0))+2(2)+2)"};

    唉,果然不严谨WA了好几次……

  • 0
    @ 2009-08-21 17:06:52

    var i,j,n,x1,x:longint;

    procedure try(k:longint);

    var d,c:longint;

    begin

    if k=3 then write('2+2(0)')

    else

    begin

    if k=2 then write('2')

    else

      if k=1 then write('2(0)')

      else

       begin

       c:=0; d:=1;

       while d

  • 0
    @ 2009-08-20 11:38:33

    简单的递归被打囧了

  • 0
    @ 2009-08-10 11:03:49

    var i,j,n,x1,x:longint;

    procedure try(k:longint);

    var d,c:longint;

    begin

    if k=3 then write('2+2(0)')

    else

    begin

    if k=2 then write('2')

    else

      if k=1 then write('2(0)')

      else

       begin

       c:=0; d:=1;

       while d

  • 0
    @ 2009-08-09 11:45:41

    如对本题有疑问可以参看我的题解:http://xujieqi.blog.hexun.com/35722312_d.html

  • 0
    @ 2009-08-06 20:06:52

    很明显

    这是一道用递归做的题

  • 0
    @ 2009-08-05 21:12:41

    通过率这么高的题,我交了N次。第一次:用c++编的语言选成了pascal。后面几次:把常数数组的2048打成了1048。囧……

  • 0
    @ 2009-08-05 19:59:10

    第一个点显示“运行超时|无输出”的注意了,该点输入数据为n=1

    就为了这个“无输出”WA了5次................

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var n:integer;

    s:array[0..20000] of ansistring;

    function f(n:integer):ansistring;

    var st:ansistring;

    a,l:integer;

    begin

    if n=1 then exit('');

    if s[n]'' then exit(s[n]);

    f:='';

    st:=binstr(n,15);

    while st[1]='0' do delete(st,1,1);

    for a:=1 to length(st) do

    if st[a]'0' then l:=a;

    for a:=1 to l do

    if st[a]='1' then

    if al then

    if length(st)-a1 then f:=f+'2('+f(length(st)-a)+')+'

    else f:=f+'2+'

    else

    if length(st)-a1 then f:=f+'2('+f(length(st)-a)+')'

    else f:=f+'2';

    s[n]:=f;

    end;

    begin

    s[0]:='0';

    s[1]:='';

    s[2]:='2';

    s[3]:='2+2(0)';

    s[4]:='2(2)';

    s[5]:='2(2)+2(0)';

    s[6]:='2(2)+2';

    s[7]:='2(2)+2+2(0)';

    s[8]:='2(2+2(0))';

    s[9]:='2(2+2(0))+2(0)';

    s[10]:='2(2+2(0))+2';

    s[11]:='2(2+2(0))+2+2(0)';

    s[12]:='2(2+2(0))+2(2)';

    s[13]:='2(2+2(0))+2(2)+2(0)';

    s[14]:='2(2+2(0))+2(2)+2';

    read(n);

    if n=1 then write('2(0)'); //该死的n=1

    write(f(n));

    end.

  • 0
    @ 2009-08-04 22:06:13

    爆囧

    没看清题,多交了一次

  • 0
    @ 2009-08-04 15:33:44

    想起数学书上一个叫秦九韶算法的我经常全错的东西...

    递归不解释 楼下有公式

  • 0
    @ 2009-08-04 14:08:19

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    哇塞,一次AC

    递归求解,相当基础

  • 0
    @ 2009-08-04 12:22:34

    var

    n,i:integer;

    s:array [0..20000] of string;

    procedure run(n:integer);

    var

    i,j,k:integer;

    begin

    if s[n]'' then exit;

    j:=n;

    k:=16384;

    for i:=14 downto 0 do

    begin

    if j>=k then

    begin

    j:=j-k;

    if s[n]'' then s[n]:=s[n]+'+';

    s[n]:=s[n]+'2';

    if i1 then

    begin

    run(i);

    s[n]:=s[n]+'('+s[i]+')';

    end;

    end;

    k:=k div 2;

    end;

    end;

    begin

    for i:=0 to 20000 do s[i]:='';

    s[0]:='0';

    readln(n);

    run(n);

    writeln(s[n]);

    end.

信息

ID
1597
难度
3
分类
模拟 点击显示
标签
递交数
2824
已通过
1420
通过率
50%
被复制
10
上传者