Editorial for Nhân 1


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

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

const d='1234567898765432';
      c2='123456790123456790';
      b2='098765432098765432';
      c='123456790';
      b='098765432';
      c1:array[1..9] of byte=(1,2,3,4,5,6,7,9,0);
      b1:array[1..9] of byte=(0,9,8,7,6,5,4,3,2);
var n,k,p,q,j,i,t:longint;

begin
     readln(k);
     for i:=1 to k do
     begin
          readln(n);
          p:=(n-1) div 9;
          q:=(n-1) mod 9;
          t:=p div 2;
          for j:=1 to t do write(c2);
          if p mod 2 = 1 then write(c);
          if q=8 then write(d)
          else
          begin
               for j:=1 to q do write(c1[j]);
               for j:=10-q to 9 do write(b1[j]);
          end;
          for j:=1 to t do write(b2);
          if p mod 2 = 1 then write(b);
          writeln(1);
     end;
end.

Code mẫu của happyboy99x

#include<cstdio>

int n; char res[2000000];

void testcase() {
    scanf("%d", &n);
    int memo = 0, p = n+n-2;
    for(int i = 1; i <= n; ++i, --p) {
        memo += i;
        res[p] = memo % 10 + 0x30;
        memo /= 10;
    }
    for(int i = n-1; i > 0; --i, --p) {
        memo += i;
        res[p] = memo % 10 + 0x30;
        memo /= 10;
    }
    if(memo) printf("%d", memo);
    res[n+n-1] = 0; printf("%s\n", res);
}

int main() {
    int tc; scanf("%d", &tc);
    while(tc--) testcase();
    return 0;
}

Code mẫu của ladpro98

var i,j,k,n,t:longint;
begin
        readln(t);
        for j:=1 to t do
          begin
                readln(n);
                for i:=1 to (n-1) div 9 do
                        write('123456790');
                k:=(n-1) mod 9;
                for i:=1 to k do
                        write(chr(48+i));
                for i:=k+1 downto 2 do
                        write(chr(48+i));
                for i:=1 to (n-1) div 9 do
                        write('098765432');
                writeln(1);
        end;
end.

Code mẫu của RR

const
  MAXN=2000111;
var
  a:array[1..2000111] of longint;
  mod10,div10:array[0..2000111] of longint;
  i,u,nho,n,test:longint;
begin
  for i:=1 to 2000000 do
    begin
      mod10[i]:=mod10[i-1]+1;
      if mod10[i]=10 then
        begin
          mod10[i]:=0;
          div10[i]:=div10[i-1]+1;
        end
      else
        div10[i]:=div10[i-1];
    end;


  read(test);
  for test:=1 to test do
    begin
      read(n);
      u:=MAXN+1; nho:=0;

      for i:=1 to n do
        begin
          dec(u);
          a[u]:=mod10[i+nho];
          nho:=div10[i+nho];
        end;

      for i:=n-1 downto 1 do
        begin
          dec(u);
          a[u]:=mod10[i+nho];
          nho:=div10[i+nho];
        end;

      while (nho>0) do
        begin
          dec(u);
          a[u]:=mod10[nho];
          nho:=div10[nho];
        end;

      for i:=u to MAXN do write(a[i]);
      writeln;
    end;
end.

Code mẫu của hieult

#include <stdio.h>
//#include <conio.h>
main()
 {
 long T,n;
 scanf("%ld",&T);
 for(long i=0;i<T;i++)
   {
   scanf("%ld",&n);
   if(n==1)
     printf("1\n");
   else if(n<10)
     {
     for(int j=1;j<=n;j++)
       printf("%d",j);
     for(int j=1;j<n-1;j++)
       printf("%d",n-j);
     printf("1\n");
     }
   else
     {
     for(long j=1;j<=(n-1)/9;j++)
       printf("123456790");
     if((n-1)%9!=0)
       {
       for(long j=1;j<=(n-1)%9+1;j++)
         printf("%ld",j);
       for(long j=1;j<=(n-1)%9-1;j++)
         printf("%ld",(n-1)%9+1-j);
       }
     for(long j=1;j<=(n-1)/9;j++)
       printf("098765432");
     printf("1\n");
     }                        
   }
 //getch();
 }

Code mẫu của khuc_tuan

#include "stdio.h"

      #define maxn 2000222

      int n;
      int a[maxn];
      char o[maxn];

      int main() {
            int t;
            scanf("%d", &t);
            while((t--)>0) {
                scanf("%d", &n);
                int nho=0;
                for(int i=1;i<=n;++i) {
                      nho = nho + i;
                      a[i] = nho%10;
                      nho = nho/10;
                }                      
                for(int i=n-1;i>=1;--i) {
                      nho = nho + i;
                      a[n+n-i] = nho%10;
                      nho = nho/10;
                }
                int id=2*n-1;
                while(nho>0) {
                      a[++id] = nho%10;
                      nho = nho/10;
                }

                n=0;
                for(int i=id;i>=1;--i) {
                    o[n++]=a[i]+'0';
                }    
                o[n]=0;
                printf("%s",o);
                printf("\n");
            }                
            return 0;
      }

Comments

Please read the guidelines before commenting.


There are no comments at the moment.