30/09/2018, 16:48

Cần sự giúp đỡ về bài tập Mã Nhị Phân Gray

Chào mọi người, mình đang gặp vấn đề thao tác xử lý mã nhị phân. Đề bài mình đang giải có dạng như sau
Input : Một số nguyên duy nhất n (1<=n<=16).
Output :
Ví dụ :

  • Nếu n = 2 thì in ra

00
01
11
10

+Nếu n = 3 thì in ra

000
001
011
010
110
111
101
100

Mình mong mọi người cho mình hướng giải quyết. Cảm ơn mọi người

Minh Hoàng viết 18:48 ngày 30/09/2018

Với n=2
Có thể thấy hàng chục được chia đều, còn hàng đơn vị thì đối xứng với nhau
với n=3
Hàng trăm được chia đều, hàng chục và đơn vị là đối xứng của n=2
hàng đơn vị sẽ lắp đầu đuôi của 01
hàng chục sẽ lắp đầu đuôi 0011
hàng trăm sẽ lắp đầu đuôi 00001111
Mình code sẽ lắp theo như thế thuật toán khác thì chờ thần gió vào thôi @Gio
topic này có thể giúp bạn nè ý tưởng cũng giống thế
http://diendan.congdongcviet.com/threads/t150274::bai-toan-ma-gray-huong-giai-quyet.cpp?p=504124#post504124

Đỗ Mạnh Hà viết 18:53 ngày 30/09/2018

Phương pháp sinh

#include "conio.h"
#include "stdio.h"
 
void main()
{
  clrscr();
  int x[30], n,i,k,l,r, dem;
 
  printf("\Nhap vao do dai cua day: ");
  scanf("%d",&n);
  // Khoi gan gia tri cua day
  for (i=0; i<n; i++)
        x[i] = 0;
  dem=0;
  while (i>=0)
  {
       dem++;
      for (i=0; i<n; i++)
        printf("%d  ",x[i]);
      printf("\n");
        i=n-1;
      while ((i>=0) && (x[i] == 1)) i--;
 
 
      if(i>=0)
      {
        x[i] = 1;
         for (int j= i+1; j<n; j++)
            x[j] = 0;
 
      }
 
  }
 
  printf("%d",dem);
  getch();
}

Đệ quy

#include "conio.h"
#include "stdio.h"
void nhiphan(int i);
int x[30],k,i;
static int n;
void printresult()
{
        for(int j=0; j<n; j++)
        printf("%d ",x[j]);
      printf("\n");
 
}
 
void main()
{
 
  clrscr();
  printf("\Nhap vao do dai cua day: ");
  scanf("%d",&n);
  nhiphan(0);
  getch();
}
 
void nhiphan(int i)
{
  int k;
    for ( k=0; k<=1; k++)
        {
            x[i] = k;
        if (i== n-1)
                printresult();
        else
            nhiphan(i+1);
 
        }
}

Nguồn: http://diendan.congdongcviet.com

Minh Hoàng viết 18:55 ngày 30/09/2018

Bạn ơi, sinh mã gray khác với sinh mã nhị phân

vi.wikipedia.org

Mã Gray

Mã nhị phân phản xạ, cũng được biết đến với tên gọi là mã Gray – đặt theo tên của Frank Gray, là một hệ thống ký số nhị phân, trong đó hai giá trị liên tiếp chỉ khác nhau một chữ số. Lúc đầu, mã nhị phân phản xạ được phát minh với mục đích ngăn ngừa tín hiệu ngõ ra không chính xác của các bộ chuyển mạch cơ điện. Ngày nay, mã Gray được sử dụng rộng rãi để sửa lỗi trong những phương tiện liên lạc bằng số, ví dụ như truyền hình kỹ thuật số mặt đất và một vài hệ thống truyền hình cáp. Tên gốc “mã ...

Đỗ Mạnh Hà viết 18:54 ngày 30/09/2018

Sorry vì chưa đọc kỹ title. Vi thấy bạn ấy post topic cho ví dụ thấy quen quen.

Ryan Nguyen viết 19:04 ngày 30/09/2018

Sự giúp đỡ của mọi người thật sự giúp ích cho mình rất nhiều. Xin cảm ơn mọi người

Bài liên quan
0