题解

166 条题解

  • 0
    @ 2013-07-12 21:19:45

    var
    a:array[0..9] of longint;
    b:array[0..10000] of longint;
    i,j,k,n,m,ans,ans1:longint;
    function change(x:longint):longint;
    var i,j,k:longint;
    begin
    k:=x; change:=0;
    while k>0 do
    begin
    j:=k mod 10;
    k:=k div 10;
    change:=change+a[j];
    end;
    if x=0 then change:=6;
    end;
    begin
    readln(n);n:=n-4;
    a[0]:=6;a[1]:=2;a[2]:=5;a[3]:=5;a[4]:=4;
    a[5]:=5;a[6]:=6;a[7]:=3;a[8]:=7;a[9]:=6;
    for i:=0 to 10000 do
    b[i]:=change(i);
    b[0]:=6;
    for i:=0 to 10000 do
    if b[i]<n then
    for j:=0 to 10000 do
    if b[i]+b[j]<n then
    begin
    k:=n-b[i]-b[j];
    if change(i+j)=k then inc(ans);
    end;
    writeln(ans);
    end.

    {很好写,就是有点慢}

  • 0
    @ 2012-11-03 13:39:54

    用模拟好难,23,24算不开啊!(可能范围小,但这两个数打表快)

  • 0
    @ 2012-11-01 18:24:34

    打表强大,不解释

  • 0
    @ 2012-10-28 18:23:06

    我只能说这数据太弱了,一点简直都不要,0——1500暴力枚举就完了,总共40行

    • @ 2017-05-07 17:54:06

      事实上只要枚举到712就行了。

      using namespace std;
      const int num[10]={6,2,5,5,4,5,6,3,7,6};
      int n,ans;
      int cnt(int inp){
          if(inp>=10){
              if(inp>=100){
                  if(inp>=1000){
                      return(num[inp%10]+num[inp/1000]+num[(inp/100-inp/1000)/10]+num[(inp%100-inp%10)/10]);
                  }else
                  return(num[inp%10]+num[(inp%100-inp%10)/10]+num[inp/100]);
              } else
              return(num[inp%10]+num[inp/10]);
          } else
          return(num[inp]);
      }
      int main(){
          cin>>n;
          n-=4;
          for(int i=0;i<=712;i++){
              for(int j=0;j<=712;j++){
                  int _i=cnt(i),_j=cnt(j),k=i+j,_k=cnt(k);
                  if(_i+_j+_k==n) ans++;   
              }
          }
          cout<<ans<<endl;
          return 0;
      }
      
      
  • 0
    @ 2012-10-13 12:33:49

    编译通过...

    ├ 测试数据 01:答案正确... (0ms, 580KB)

    ├ 测试数据 02:答案正确... (0ms, 580KB)

    ├ 测试数据 03:答案正确... (0ms, 580KB)

    ├ 测试数据 04:答案正确... (0ms, 580KB)

    ├ 测试数据 05:答案正确... (0ms, 580KB)

    ├ 测试数据 06:答案正确... (0ms, 580KB)

    ├ 测试数据 07:答案正确... (0ms, 580KB)

    ├ 测试数据 08:答案正确... (0ms, 580KB)

    ├ 测试数据 09:答案正确... (0ms, 580KB)

    ├ 测试数据 10:答案正确... (0ms, 580KB)

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

    Accepted / 100 / 0ms / 580KB

    打表秒过

    {

    ID:darkgod-z

    PROG:vijos P1496

    HANG:PASCAL

    }

    const

    a:array [0..24] of integer=(

    0,

    0,0,0,0,0,

    0,0,0,0,0,

    0,0,1,2,8,

    9,6,9,29,39,

    38,65,88,128);

    var

    n:integer;

    begin

    readln(n);

    writeln(a[n]);

    end.

  • 0
    @ 2012-09-28 14:17:23

    var

    n,ans,u,k1,k2,k3:longint;

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

    procedure firstdeal;

    begin

    a[0]:=6;

    a[1]:=2;

    a[2]:=5;

    a[3]:=5;

    a[4]:=4;

    a[5]:=5;

    a[6]:=6;

    a[7]:=3;

    a[8]:=7;

    a[9]:=6;

    end;

    begin

    firstdeal;

    readln(n);

    dec(n,4);

    for k1:=0 to 999 do

    for k2:=0 to 999 do

    begin

    k3:=k1+k2;

    u:=0;

    if k1

  • 0
    @ 2012-08-20 11:38:26

    思维不够啊,看了楼下的大牛真是打开眼界,我怎么就想不到这样枚举呢!!!Orz~~~

  • 0
    @ 2010-04-15 16:55:31

    program bangbang

    var

    m,i,j,k,n,s:integer

    a:array[0..24] of integer

    readln(n);

    s:=0

    a[0]:=6

    a[1]:=2

    a[2]:=5

    a[3]:=5

    a[4]:=4

    a[5]:=5

    a[6]:=6

    a[7]:=3

    a[8]:=7

    a[9]:=6

    for i:=10 to 24 do

    begin

    m:i

    a[i]:=a[(m mod 10)]+a[(m div 10)]

    end;

    for i:=0 to 24 do

    for j:=0 to 24 do

    for k:=0 to 24 do

    begin

    if(i+j=k)and(a[i]+a[j]+a[k]+4=n)

    then

    inc(s);

    end;

    writeln(s);

    end.

  • 0
    @ 2010-04-11 09:06:51

    问一下,高手回答下啦

    这道题目的‘=’和‘+’要不要算在那几根火柴棒里啊

  • 0
    @ 2010-03-06 22:07:05

    program p1496(input,output);

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

    var a,b,n,zs,zha,zhb,zhh:longint;

    function qq(shu:longint):longint;

    var gw:longint;

    begin

    qq:=0;

    if shu=0

    then qq:=sz[0]

    else while shu>0 do

    begin

    gw:=shu mod 10;

    shu:=shu div 10;

    qq:=qq+sz[gw];

    end;

    end;

    begin

    readln(n);

    zs:=0;

    for a:=0 to 1000 do

    for b:=0 to 1000 do

    begin

    zha:=qq(a);

    zhb:=qq(b);

    zhh:=qq(a+b);

    if zha+zhb+zhh+4=n

    then zs:=zs+1;

    end;

    writeln(zs);

    end.

    有人这样写道…………

    但……我……%——%

    program p1496(input,output);

    var n:longint;

    begin

    readln(n);

    case n of

    0..12:writeln(0);

    13:writeln(1);

    14:writeln(2);

    15:writeln(8);

    16,18:writeln(9);

    17:writeln(6);

    19:writeln(29);

    20:writeln(39);

    21:writeln(38);

    22:writeln(65);

    23:writeln(88);

    24:writeln(128);

    end;

    end.

    ……………………………………………………

    …………不要迷恋哥,哥只是个传说…………

    ……………………………………………………

  • 0
    @ 2009-11-19 21:56:34

    这样都0秒

    program v1;

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

    var e:array[0..999]of integer;

    a,b,c,s,n,total,i,j,k:integer;

    begin

    readln(n);n:=n-4;total:=0;

    for i:=0 to 9 do e[i]:=d[i];

    for i:=1 to 9 do

    for j:=0 to 9 do e:=d[i]+d[j];

    for i:=1 to 9 do

    for j:=0 to 9 do

    for k:=0 to 9 do

    e:=d[i]+d[j]+d[k];

    for a:=0 to 999 do

    for b:=0 to 999 do

    begin c:=a+b;if (c

  • 0
    @ 2009-11-15 22:28:39

    [silver=white]

    program noip2008_2;

    var a:array[0..9] of integer;

    i,j,n,k:longint;

    function sum(i:longint):longint;

    var x:integer;

    begin

    sum:=0;

    if i=0 then sum:=6;

    while i0 do

    begin

    x:=i mod 10;

    sum:=sum+a[x];

    i:=i div 10;

    end;

    end;

    begin

    readln(n); k:=0;

    a[0]:=6; a[1]:=2; a[2]:=5; a[3]:=5; a[4]:=4; a[5]:=5; a[6]:=6;

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

    for i:=0 to 1000 do

    for j:=0 to 1000 do

    if (sum(i)+sum(j)+sum(i+j)=n-4) then inc(k);

    writeln(k);

    readln

    end.

  • 0
    @ 2009-11-15 20:33:33

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

  • 0
    @ 2009-11-11 20:05:58

    var a:array[0..9] of integer;

    q,h,z,i,j,n,sum:integer;

    function qs(m:integer):integer;

    var g,s,b,qi,i:integer;

    begin

    if m=1000 then begin

    g:=m mod 10;

    i:=m div 10;

    s:=i mod 10;

    i:=i div 10;

    b:=i mod 10;

    qi:=i div 10;

    qs:=a[g]+a+a+a[qi];

    end;

    end;

    begin

    readln(n);

    a[0]:=6;a[1]:=2;a[2]:=5;a[3]:=5;a[4]:=4;

    a[5]:=5;a[6]:=6;a[7]:=3;a[8]:=7;a[9]:=6;

    for i:=0 to 1000 do

    for j:=0 to 1000 do

    begin

    q:=qs(i)+qs(j);

    h:=qs(i+j);

    if q+h+4=n then inc(sum);

    end;

    writeln(sum);

    end.

  • 0
    @ 2009-11-08 17:35:48

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    #include

    int N;

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

    int n,total=0;

    void pre_doing()

    {

    int i;

    for (i=10;i

  • 0
    @ 2009-11-04 16:16:15

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    先把0到1422的全部火柴值算出来,然后穷举。

    var

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

    b:array[0..1422]of longint;

    n,i,j,sum,max:longint;

    procedure quwei;

    var k,x,i:longint;

    begin

    for i:=1 to 1422 do

    begin

    k:=i;

    while k>0 do

    begin

    x:=k mod 10;

    k:=k div 10;

    b[i]:=b[i]+a[x];

    end;

    end;

    end;

    //---|---|---|---|---|--

    begin

    fillchar(b,sizeof(b),0);

    a[0]:=6;

    a[1]:=2;

    a[2]:=5;

    a[3]:=5;

    a[4]:=4;

    a[5]:=5;

    a[6]:=6;

    a[7]:=3;

    a[8]:=7;

    a[9]:=6;

    read(n);

    n:=n-4;

    quwei;

    b[0]:=6;

    b[10]:=8;

    b[100]:=14;

    b[1000]:=20;

    max:=0;

    for i:=0 to 711 do

    for j:=0 to 711 do

    if b[i]+b[j]+b=n then

    if ij then

    inc(sum)

    else inc(max);

    write(sum+max);

    end.

  • 0
    @ 2009-11-01 11:07:06

    先用枚举做出来,再打一张表上去。时间复杂度O(1),嚯嚯~~~

  • 0
    @ 2009-10-29 10:40:11

    program p1496;

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

    var

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

    i,j,n,count:longint;

    begin

    readln(n);

    n:=n-4;

    a[0]:=6;

    for i:=1 to maxn do

    begin

    j:=i;

    while j>0 do

    begin

    inc(a[i],c[j mod 10]);

    j:=j div 10;

    end;

    end;

    for i:=0 to maxn do if a[i]

  • 0
    @ 2009-10-28 08:07:00

    编译通过...

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

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

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

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

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

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

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

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

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

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

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

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

    这就是15分钟裸枚举的效率。。

  • 0
    @ 2009-10-27 20:27:52

    去年挂在代码不足40行的题>.< 为什么呢.

    强烈建议管理员删除不道德贴!!!

信息

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