题解

166 条题解

  • 0
    @ 2009-06-29 14:08:23

    根据事实来看,只要2层循环就可以了,范围是1000,

    可是我真的不知道如何证明,

    也不知道1000算出来的是不是对的.

    所以还是把每个火柴棒能堆出来的数统枚举出来.

    然后枚举火柴棒数,这样比较保险,就是编起来好麻烦,用了5层循环啊.

    编译通过...

    ├ 测试数据 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-06-22 11:21:14

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    预处理+枚举

    本是水题 可是当年用搜索只过了3个点……

    const

    c:array[0..9] of longint=(6,2,5,5,4,5,6,3,7,6);

    var n,k,i,j,count:longint;

    a:array[0..11111]of longint;

    begin

    readln(n);

    n:=n-4;

    count:=0;

    for i:=0 to 9 do a[i]:=c[i];

    for i:=10 to 1111 do

    a[i]:=a[i mod 10]+a[i div 10];

    for k:=0 to 1111 do

    for i:=0 to k do

    begin

    j:=k-i;

    if a[i]+a[j]+a[k]=n then inc (count);

    end;

    writeln(count);

    end.

  • 0
    @ 2009-06-07 23:23:40

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    #include

    using namespace std;

    int match[]={6,2,5,5,4,5,6,3,7,6};

    inline int getnum(int num)

    {

    if(num==0) return match[0];

    int ret=0;

    int n=num;

    while(n>0)

    {

    ret+=match[n%10];

    n=n/10;

    }

    return ret;

    }

    int main()

    {

    int n;

    int c=0;

    cin>>n;

    n-=4;

    for(int a=0;a=n) continue;

    for(int b=a;b=n) continue;

    if(na+nb+getnum(a+b)==n)

    {

    c+=a==b?1:2;

    }

    }

    }

    cout

  • 0
    @ 2009-06-05 12:08:32

    水啊水啊,早知道昨年我就不做第4道(第四题我没得到分),我就做这道题,我现在就一等了...55555

  • 0
    @ 2009-05-24 19:23:04

    囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧囧

  • 0
    @ 2009-05-09 21:22:09

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    #include

    using namespace std;

    int sz,sz2,sz3,a[10]={6,2,5,5,4,5,6,3,7,6};

    void fl(int i,int j,int c)

    {

    int h,k,l;

    h=i;k=j;l=c;

    sz=0;sz2=0;sz3=0;

    if(h==0)sz=6;if(k==0)sz2=6;if(l==0)sz3=6;

    while(h!=0){sz+=a[h%10];h=h/10;}

    while(k!=0){sz2+=a[k%10];k=k/10;}

    while(l!=0){sz3+=a[l%10];l=l/10;}

    }

    int main()

    {

    int i,j,n,m=0,m1=0,c,b[1001]={0};

    cin>>n;

    n=n-4;

    for(i=0;i

  • 0
    @ 2009-04-22 17:17:16

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    NOIP 2008 ,我败得太冤了!!

    循环 0--1000 ,本来好好的,却不知怎么想的改成了 0---|400 = =

    我想大声的说一个字 “ 太阳 ”!

  • 0
    @ 2009-04-16 17:00:00

    program aaa;

    var

    u:array[0..10000] of integer;

    i,j,sum,n:integer;

    begin

    read(n);

    sum:=0;

    u[0]:=6;

    u[1]:=2;u[2]:=5;u[3]:=5;

    u[4]:=4;u[5]:=5;u[6]:=6;

    u[7]:=3;u[8]:=7;u[9]:=6;

    for i:=10 to 99 do u[i]:=u[i mod 10]+u[i div 10];

    for i:=100 to 999 do u[i]:=u[i mod 10]+u[i div 10];

    for i:=1000 to 2000 do u[i]:=u[i mod 10]+u[i div 10];

    for i:=0 to 1000 do

    for j:=0 to 1000 do

    if (u[i]+u[j]+u+4=n) then inc(sum);

    write(sum);

    end.

  • 0
    @ 2009-04-06 13:09:45

    #include "stdio.h"

    int main()

    {

      int i,j,n,ans,s[3000]={6,2,5,5,4,5,6,3,7,6};

      scanf("%d",&n);

      if(n>=0&&n

  • 0
    @ 2009-03-23 13:41:03

    const num:array[0..9] of longint=(6,2,5,5,4,5,6,3,7,6);

    var n,n1,n2,n3,i,j,a,b,c,res:longint;

    begin

      res:=0;

      readln(n);

      n:=n-4;

      for i:=0 to 999 do

        for j:= 0 to 999 do

        begin

          a:=i;b:=j;c:=a+b;n1:=0;n2:=0;n3:=0;

          if a>99 then begin

            n1:=num[a div 100];

            a:=a mod 100;n1:=n1+num[a div 10]+num[a mod 10]end

            else begin

              if a>9 then begin n1:=n1+num[a div 10];a:=a mod 10;end;

            n1:=n1+num[a];

            end;

          if b>99 then begin

            n2:=num[b div 100];

            b:=b mod 100;n2:=n2+num[b div 10]+num[b mod 10]end

            else begin

              if b>9 then begin n2:=n2+num[b div 10];b:=b mod 10;end;

            n2:=n2+num;

            end;

          if c>99 then begin

            n3:=num[c div 100];

            c:=c mod 100;n3:=n3+num[c div 10]+num[c mod 10]end

            else begin

              if c>9 then begin n3:=n3+num[c div 10];c:=c mod 10;end;

            n3:=n3+num[c];

            end;

          if n1+n2+n3=n then res:=res+1;

        end;

      writeln(res);

    end.

  • 0
    @ 2009-03-14 23:18:23

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    #include "stdio.h"

    int main()

    {

    int i,j,n,ans,s[3000]={6,2,5,5,4,5,6,3,7,6};

    scanf("%d",&n);

    if(n>=0&&n

  • 0
    @ 2009-03-04 12:46:08

    #include

    int main (){

    int n;

    scanf ("%d",&n);

    if (n>=0&&n

  • 0
    @ 2009-03-02 22:18:33

    提高搜索效率,40分

    降低搜索效率,AC

    真他妈搞笑

  • 0
    @ 2009-02-24 21:33:01

    Program p1496;

    Const

    f:array[0..9]of Longint=(6,2,5,5,4,5,6,3,7,6);

    Var

    a:array[0..4000]of Longint;

    b:array[4..24]of Longint; {交表数据存储数组}

    i,j,n,m,s:Longint;

    k:Longint; {交表用变量}

    Begin

    For i:=0 to 9 do a[i]:=f[i];

    For i:=10 to 2000 do a[i]:=a[i mod 10]+a[i div 10];

    {assign(output,'p1496.out');

    rewrite(output);

    For k:=4 to 24 do

    For i:=0 to 999 do

    For j:=0 to 999 do

    If a[i]+a[j]+a+4=k then inc(b[k]);

    Writeln('Program p1496;');

    Writeln('Const');

    Write(' f:array[4..24]of Longint=(');

    For i:=4 to 23 do Write(b[i],',');

    Writeln(b[24],');');

    Writeln('Var');

    Writeln(' n:Longint;');

    Writeln('Begin');

    Writeln(' Readln(n);');

    Writeln(' Writeln(f[n]);');

    Writeln('End.');

    close(output);}{交表程序段}

    Readln(n);

    For i:=0 to 999 do

    For j:=0 to 999 do

    If a[i]+a[j]+a+4=n then inc(s);

    Writeln(s);

    End.

    {无优化程序段}

    把交表程序段的大括号去掉,加在无优化程序段后运行,即一个'p1496.out'的交表程序!

  • 0
    @ 2009-02-21 20:57:39

    苦啊!!!!!!!!!!

  • 0
    @ 2009-02-11 19:57:38

    编译通过...

    ├ 测试数据 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-02-06 15:11:55

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    太简单了

    u[0]:=6;

    u[1]:=2;u[2]:=5;u[3]:=5;

    u[4]:=4;u[5]:=5;u[6]:=6;

    u[7]:=3;u[8]:=7;u[9]:=6;

    for i:=10 to 99 do u[i]:=u[i mod 10]+u[i div 10];

    for i:=100 to 999 do u[i]:=u[i mod 10]+u[i div 10];

    for i:=1000 to 2000 do u[i]:=u[i mod 10]+u[i div 10];

    下面枚举

    for i:=0 to 1000 do

    for j:=0 to 1000 do

    if (u[i]+u[j]+u+4=n) then inc(sum);

    电脑算岂不是很简单,3分钟写完,一次AC

  • 0
    @ 2009-02-06 13:38:33

    编译通过...

    ├ 测试数据 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-02-05 20:29:02

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    program Project1;

    const num:array[0..9] of longint=(6,2,5,5,4,5,6,3,7,6);

    var n,n1,n2,n3,i,j,a,b,c,res:longint;

    begin

    res:=0;

    readln(n);

    n:=n-4;

    for i:=0 to 999 do

    for j:= 0 to 999 do

    begin

    a:=i;b:=j;c:=a+b;n1:=0;n2:=0;n3:=0;

    if a>99 then begin

    n1:=num[a div 100];

    a:=a mod 100;n1:=n1+num[a div 10]+num[a mod 10]end

    else begin

    if a>9 then begin n1:=n1+num[a div 10];a:=a mod 10;end;

    n1:=n1+num[a];

    end;

    if b>99 then begin

    n2:=num[b div 100];

    b:=b mod 100;n2:=n2+num[b div 10]+num[b mod 10]end

    else begin

    if b>9 then begin n2:=n2+num[b div 10];b:=b mod 10;end;

    n2:=n2+num;

    end;

    if c>99 then begin

    n3:=num[c div 100];

    c:=c mod 100;n3:=n3+num[c div 10]+num[c mod 10]end

    else begin

    if c>9 then begin n3:=n3+num[c div 10];c:=c mod 10;end;

    n3:=n3+num[c];

    end;

    if n1+n2+n3=n then res:=res+1;

    end;

    writeln(res);

    end.

  • 0
    @ 2009-02-05 10:14:47

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    考试一去不复返`

信息

ID
1496
难度
3
分类
搜索 点击显示
标签
递交数
6082
已通过
2977
通过率
49%
被复制
17
上传者