Hướng dẫn giải của LATGACH3


Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.

Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này

Code mẫu của flashmt

var n,i:longint;
    f,s:array[0..30] of longint;

begin
     f[0]:=1; f[2]:=3;
     s[0]:=1; s[2]:=4;
     for i:=4 to 30 do
         if not odd(i) then
         begin
              f[i]:=f[i-2]*3+s[i-4]*2;
              s[i]:=s[i-2]+f[i];
         end;
     while true do
     begin
          read(n);
          if n=-1 then halt
          else writeln(f[n]);
     end;
end.

Code mẫu của happyboy99x

#include<cstdio>

int f[31], g[31];

int main() {
    f[0] = 1; f[1] = 0; g[0] = 0; g[1] = 1;
    for(int i = 2; i <= 30; ++i) {
        f[i] = f[i-2] + 2*g[i-1];
        g[i] = f[i-1] + g[i-2];
    }
    int n;
    while(scanf("%d", &n) != EOF && n != -1) printf("%d\n", f[n]);
    return 0;
}

Code mẫu của ladpro98

program m3tile;
var     n,i:longint;
        f:array[0..33] of longint;
begin
        f[0]:=1;
        f[2]:=3;
        for i:=3 to 30 do
        if odd(i) then f[i]:=0
        else f[i]:=4*f[i-2]-f[i-4];
        readln(n);
        while n<>-1 do
        begin
                writeln(f[n]);
                readln(n);
        end;

end.

Code mẫu của RR

{$R+,Q+}
uses math;
const
  FINP='';
  FOUT='';
  MAXN=30;
var
  f1,f2:text;
  f:array[0..MAXN] of longint;
  n:longint;
procedure openF;
begin
  assign(f1,FINP); reset(f1);
  assign(f2,FOUT); rewrite(f2);
end;
procedure closeF;
begin
  close(f1);
  close(f2);
end;
procedure init;
var
  i,j:longint;
begin
  f[0]:=1;
  for i:=1 to MAXN do
    if i mod 2=1 then f[i]:=0
    else
      begin
        for j:=0 to i-2 do
          f[i]+=2*f[j];
        f[i]+=f[i-2];
      end;
end;
begin
  init;
  openF;
  read(f1,n);
  while n>=0 do
    begin
      writeln(f2,f[n]);
      read(f1,n);
    end;
  closeF;
end.

Code mẫu của hieult

#include <stdio.h>
//#include <conio.h>
main()
{
long n,m,f[17];
f[0]=1;
for(int i=1;i<=15;i++)
 { f[i]=f[i-1]*3 ;
   for(int j=0;j<=i-2;j++)
     f[i]=f[i]+2*f[j];
 }
do
 { scanf("%ld",&n);
   if(n==-1)
     break;
   if(n%2!=0)
     printf("0\n");
   else
     printf("%ld\n",f[n/2]);
 }
 while(n!= -1);
}

Code mẫu của ll931110

Program M3TILE;
        Var
                n: integer;
                F: array[0..30] of longint;

Procedure solve;
          Var
                i,k: integer;
          Begin
                Fillchar(F, sizeof(F), 0);
                F[0]:= 1;

                For i:= 2 to 30 do
                        Begin
                                F[i]:= F[i - 2] * 3;

                                k:= i - 4;
                                While k >= 0 do
                                        Begin
                                                F[i]:= F[i] + F[k] * 2;
                                                k:= k - 2;
                                        End;
                        End;
          End;

Begin
        solve;
        Repeat
                Readln(n);
                If n <> -1 then writeln(F[n]);
        Until n = -1;
End.

Code mẫu của skyvn97

#include<stdio.h>
#define MAX   40
typedef unsigned long long ull;
ull f[MAX];
ull g[MAX];
ull h[MAX];
int n;
void init(void)
{
   int i;
   f[0]=1;
   f[1]=0;
   g[0]=1;
   g[1]=0;
   h[0]=0;
   h[1]=1;
   for (i=2;i<MAX;i=i+1)   
       {
        f[i]=f[i-2]+g[i-2]+h[i-1];
        g[i]=f[i]+h[i-1];
        h[i]=g[i-1];
       }
}
int main(void)
{
    init();
    while (true)
          {
                scanf("%d",&n);
                if (n<0) return 0;
                else printf("%llu\n",f[n]);
          }
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.