Mạch logic kỹ thuật số - đề thi


14

Tôi có một câu hỏi từ kỳ thi mà tôi không thể giải được:

Tôi cần xây dựng một mạch logic kỹ thuật số đang nhận số 4 bit và trả về truenếu số đó là 0, 7hoặc 14. Tôi chỉ có một XORcổng (2 đầu vào), một NOR(3 đầu vào), một NAND(2 đầu vào) và một bộ giải mã 3 đến 8.

Tôi nghĩ rằng câu hỏi đó là không thể giải quyết được, tôi đã không tìm thấy bất kỳ sự kết hợp nào có thể làm điều đó. Bất kỳ ý tưởng làm thế nào để giải quyết nó?


1
Như một gợi ý: đưa ra 4 bit và bộ giải mã 3-8, bạn phải xử lý một trong các bit khác nhau.
Brian Drumond

2
@BrianDrummond nhưng tôi đã biết điều đó và tôi vẫn không thành công để giải quyết nó. Mọi giải pháp mà tôi đã thử đều cảm thấy rằng nó thiếu một cổng OR. Tôi không thể tìm thấy sự kết hợp như vậy với các cổng đã cho có thể giải quyết vấn đề ... Lưu ý rằng tôi chỉ có MỘT cổng cho mỗi loại ...
nrofis

3
@BrianDrummond: nếu bạn đăng một mô tả về giải pháp mà bạn nghĩ là tồn tại, chúng tôi có thể xác minh nó. Thật khó để nói rằng không có giải pháp tồn tại, nhưng dễ dàng xác minh nếu một giải pháp là hợp lệ.
pasaba por aqui

2
@Ido Kessler ... Tôi bị thu hút bởi giải pháp của bạn và nếu bằng chứng của bạn là chính xác thì tôi xin lỗi bạn đã xóa nó. Không ai cho đến nay dường như có một giải pháp. Có lẽ nếu bạn bao gồm một mô tả về thuật toán của bạn, nó sẽ cải thiện câu trả lời. Làm thế nào bạn tự tin rằng nó là chính xác và không có lỗi?
Tut

3
@jalalipop, hôm qua tôi đã làm. Ido Kessler và pasaba por aqui đã đúng, giáo sư của tôi nói rằng câu hỏi đã sai và NAND phải là
BẮC

Câu trả lời:


24

Tôi đã viết một thuật toán trong C # để thử mọi sự kết hợp có thể có của chúng Nor 3->1 Xor 2->1 Nand 2->1Decoder 3->8.

Sau khi chạy nó 7 triệu năm 2 giờ, nó trả về 42 Sai. Tôi tin rằng điều này dự đoán rằng câu hỏi không có câu trả lời vì thuật toán này kiểm tra mọi sự kết hợp có thể. :)

Tôi đã được yêu cầu mô tả nó, vì vậy phần tiếp theo là một lời giải thích về các phần của mã, từng phần. TL; DR - bạn chỉ có thể bỏ qua phần mã ở cuối :)


Hãy nói về các dòng đầu vào, chúng có 0 hoặc 1 trạng thái và với mỗi đầu vào có thể (0 đến 15) chúng giữ các giá trị khác nhau:

đối với dòng đầu tiên, nó trông như thế: 0 1 0 1 0 1 ... Dòng thứ hai là: 0 0 1 1 0 0 1 1 ... thứ ba: 0 0 0 0 1 1 1 1 .... như nhị phân đếm ... bạn có ý tưởng: P

Vì vậy, tôi đã tạo một đối tượng đại diện cho từng dòng trong mỗi trạng thái của mình:

class BitLine{
    bool[] IsActiveWhenInputIs = new bool[16];
}

Như nó nói bitLine.IsActiveWhenInputIs [5] trả về việc dòng có hoạt động khi đầu vào là 5 hay không.

Đây là mã tạo ra các dòng đầu vào hoàn toàn:

var bitLineList = new BitLine[6]; // initialize new array of bitLines
for (int i = 0; i < 6; i++) bitLineList [i] = new BitLine(); // initialize each bitLine
for (int i = 0; i < 16; i++)
{
    for (int j = 0; j < 4; j++)
    {
        int checker = 1 << j; // check whether the j-th bit is activated in the binary representation of the number.
        bitLineList[j].IsActiveWhenInputIs[i] = ((checker & i) != 0); // if it's active, the AND result will be none zero, and so the return value will be true - which is what we need :D
    }
}

Chúng tôi cũng sẽ tạo ra một dòng bit "luôn luôn đúng" và "luôn luôn sai" - để cung cấp đầu vào "0" hoặc đầu vào "1" không đổi.

for (int i = 0; i < 16; i++){
    bitLineList[4].IsActiveWhenInputIs[i] = false;
    bitLineList[5].IsActiveWhenInputIs[i] = true;
}

Bây giờ nếu bạn chú ý, những gì chúng ta đang tìm kiếm thực sự là một bitLine cụ thể, một điều đúng khi đầu vào là 0, 7, 14. Hãy trình bày nó trong lớp của chúng ta:

var neededBitLine = new BitLine();
for (int i = 0; i < 16; i++){
    neededBitLine.IsActiveWhenInputIs[i] = ((i % 7) == 0); // be true for any number that is devideble by 7 (0,7,14)
}

Điều này làm cho mọi thứ thực sự đơn giản: những gì chúng ta thực sự đang tìm kiếm là một cách để "giả mạo" cái này cần thiết từ dòng bit đầu vào (đây là cách tôi thể hiện cho chương trình của mình những gì tôi muốn đầu ra của mình).

Bây giờ, đây là cách chúng tôi đi trên: mỗi lần chúng tôi sử dụng một số yếu tố logic trên bitlines của chúng tôi như Xor, Nor, Nandhoặc thậm chí Decoder, chúng tôi đang thực sự tạo ra một bitLine mới \ s. Chúng tôi biết giá trị của từng dòng trong mỗi đầu vào có thể từ 0 đến 15, vì vậy chúng tôi cũng có thể tính giá trị bitLine \ s mới trong mỗi đầu vào có thể!

Nand Nor và Xor đều đơn giản:

void Xor(BitLine b1, BitLine b2, BitLine outputBitLine)
{
    for (var i = 0; i < 16; i++)
    {
        outputBitLine.IsActiveWhenInputIs[i] = b1.IsActiveWhenInputIs[i] != b2.IsActiveWhenInputIs[i];
    }
}

void Nand(BitLine b1, BitLine b2, BitLine outputBitLine)
{
    for (var i = 0; i < 16; i++)
    {
        outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] && b2.IsActiveWhenInputIs[i]);
    }
}

void Nor(BitLine b1, BitLine b2, BitLine b3, BitLine outputBitLine)
{
    for (var i = 0; i < 16; i++)
    {
        outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] || b2.IsActiveWhenInputIs[i] || b3.IsActiveWhenInputIs[i]);
    }
}

Đối với mỗi đầu vào có thể, nó đại diện cho cách BitLine mới sẽ hoạt động.

Xử lý bộ giải mã hơi khó một chút, nhưng ý tưởng là "nếu các bit ở đầu vào đại diện cho số x ở dạng nhị phân, thì dòng bit đầu ra x sẽ là đúng, trong khi tất cả các bit khác sẽ sai. Hàm này sẽ lấy một mảng bitline và thêm 8 bitline mới vào mảng.

void Decoder(BitLine b1, BitLine b2, BitLine b3, List<BitLine> lines, int listOriginalLength)
{
    for (int optionNumber = 0; optionNumber < 8; optionNumber++)
    {
        for (var i = 0; i < 16; i++)
        {
            int sum = 0;
            if (b1.IsActiveWhenInputIs[i]) sum += 4;
            if (b2.IsActiveWhenInputIs[i]) sum += 2;
            if (b3.IsActiveWhenInputIs[i]) sum += 1;

            lines[listOriginalLength+optionNumber].IsActiveWhenInputIs[i] = (sum == optionNumber);
        }
    }
}

Bây giờ chúng ta có tất cả các yếu tố cơ bản của mình, vì vậy hãy nói về thuật toán:

Chúng tôi sẽ thực hiện một thuật toán đệ quy, ở mỗi độ sâu, nó sẽ cố gắng sử dụng các phần tử khác (cũng không phải là \ nand \ xor \ decoder) trên các bitline hiện có, và sau đó đặt phần tử thành không thể sử dụng cho độ sâu đệ quy tiếp theo. Bất cứ khi nào chúng tôi đến cuối cùng và chúng tôi không có nhiều yếu tố để sử dụng, chúng tôi sẽ kiểm tra xem chúng tôi có một bitline đó là những gì chúng tôi đang tìm kiếm.

Mã này kiểm tra trong bất kỳ thời điểm nào cho dù nhóm dòng hiện tại có chứa dòng chúng tôi đang tìm kiếm hay không:

bool CheckIfSolutionExist(List<BitLine> lines, int linesLength BitLine neededLine)
{
    for(int i = 0; i<linesLength; i++){
         if (lines[i].CheckEquals(neededLine))
        {
            return true;
        }

    }
    return false;
}

Đây là chức năng mà nó sử dụng để kiểm tra xem hai dòng có bằng nhau không:

bool CheckEquals(BitLine other)
{
    for (var i = 0; i < 16; i++)
    {
        if (this.IsActiveWhenInputIs[i] != other.IsActiveWhenInputIs[i])
        {
            return false;
        }
    }
    return true;
}

Ok, vậy bây giờ đối với phần chính, đây là thuật toán chính:

bool Solve(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if ((!nand) && (!nor) && (!xor) && (!decoder))
    {
        return CheckIfSolutionExist(lines, listLength, neededLine);
    }
    else
    {
        if (HandleNand(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        if (HandleNor(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        if (HandleXor(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        if (HandleDecoder(lines, nand, nor, xor, decoder, neededLine,listLength))
        {
            return true;
        }
        return false;
    }
}

Hàm này nhận được danh sách các bitLines có sẵn, độ dài danh sách, boolean đại diện cho dù mỗi phần tử hiện có sẵn (xor / nor / nand / decoder) và bitLine đại diện cho bitLine mà chúng ta đang tìm kiếm.

Ở mỗi giai đoạn, nó sẽ kiểm tra xem chúng ta có sử dụng thêm phần tử nào không, nếu không - nó sẽ kiểm tra xem chúng ta có lưu trữ bitline cần thiết hay không.

Nếu chúng ta vẫn có nhiều phần tử hơn, thì đối với mỗi phần tử, nó gọi một hàm có nhiệm vụ xử lý việc tạo bitLines mới bằng cách sử dụng các phần tử đó và gọi độ sâu hồi quy tiếp theo sau đó.

Các hàm xử lý tiếp theo đều khá đơn giản, chúng có thể được dịch thành "chọn 2 \ 3 từ các bitline có sẵn và kết hợp chúng bằng cách sử dụng phần tử có liên quan. Sau đó, gọi độ sâu tiếp theo của đệ quy, chỉ là lần này nó sẽ không chứa yếu tố này! ".

đó là các chức năng:

bool HandleNand(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (nand)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                BitLine.Nand(lines[i], lines[j],lines[listLength]);
                if (Solve(lines,listLength+1, false, nor, xor, decoder, neededLine))
                {
                    return true;
                }
            }
        }
    }
    return false;
}

bool HandleXor(List<BitLine> lines,  int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (xor)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                BitLine.Xor(lines[i], lines[j],lines[listLength]);
                if (Solve(lines,listLength+1, nand, nor, false, decoder, neededLine))
                {
                    return true;
                }

            }
        }
    }
    return false;
}

bool HandleNor(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (nor)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                for (int k = j; k < listLength; k++)
                {
                    BitLine.Nor(lines[i], lines[j], lines[k],lines[listLength]);
                    if (Solve(lines,listLength+1, nand, false, xor, decoder, neededLine))
                    {
                        return true;
                    }

                }
            }
        }
    }
    return false;
}

bool HandleDecoder(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
{
    if (decoder)
    {
        for (int i = 0; i < listLength; i++)
        {
            for (int j = i; j < listLength; j++)
            {
                for (int k = j; k < listLength; k++)
                {
                    BitLine.Decoder(lines[i], lines[j], lines[k],lines,listLength);
                    if (Solve(lines,listLength+8, nand, nor, xor, false, neededLine))
                    {
                        return true;
                    }
                }
            }
        }
    }
    return false;
}

Và đây là nó, chúng ta chỉ cần gọi hàm này với dòng cần thiết mà chúng ta đang tìm kiếm và nó kiểm tra mọi sự kết hợp có thể có của các bộ phận điện để kiểm tra xem có thể kết hợp chúng theo cách mà cuối cùng một dòng sẽ xuất ra với các giá trị cần thiết.

* lưu ý rằng tôi luôn sử dụng cùng một danh sách, vì vậy tôi sẽ không cần phải tạo các phiên bản bitline mới mọi lúc. Tôi cho nó một bộ đệm 200 vì lý do đó.


Đây là chương trình hoàn chỉnh:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp2
{
    public class BitLine
    {
        public bool[] IsActiveWhenInputIs = new bool[16];

        public static void Xor(BitLine b1, BitLine b2, BitLine outputBitLine)
        {
            for (var i = 0; i < 16; i++)
            {
                outputBitLine.IsActiveWhenInputIs[i] = b1.IsActiveWhenInputIs[i] != b2.IsActiveWhenInputIs[i];
            }
        }

        public static void Nand(BitLine b1, BitLine b2, BitLine outputBitLine)
        {
            for (var i = 0; i < 16; i++)
            {
                outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] && b2.IsActiveWhenInputIs[i]);
            }
        }

        public static void Nor(BitLine b1, BitLine b2, BitLine b3, BitLine outputBitLine)
        {
            for (var i = 0; i < 16; i++)
            {
                outputBitLine.IsActiveWhenInputIs[i] = !(b1.IsActiveWhenInputIs[i] || b2.IsActiveWhenInputIs[i] || b3.IsActiveWhenInputIs[i]);
            }
        }

        public static void Decoder(BitLine b1, BitLine b2, BitLine b3, List<BitLine> lines, int listOriginalLength)
        {
            for (int optionNumber = 0; optionNumber < 8; optionNumber++)
            {
                for (var i = 0; i < 16; i++)
                {
                    int sum = 0;
                    if (b1.IsActiveWhenInputIs[i]) sum += 4;
                    if (b2.IsActiveWhenInputIs[i]) sum += 2;
                    if (b3.IsActiveWhenInputIs[i]) sum += 1;

                    lines[listOriginalLength + optionNumber].IsActiveWhenInputIs[i] = (sum == optionNumber);
                }
            }
        }

        public bool CheckEquals(BitLine other)
        {
            for (var i = 0; i < 16; i++)
            {
                if (this.IsActiveWhenInputIs[i] != other.IsActiveWhenInputIs[i])
                {
                    return false;
                }
            }
            return true;
        }

    }

    public class Solver
    {
        bool CheckIfSolutionExist(List<BitLine> lines, int linesLength, BitLine neededLine)
        {
            for (int i = 0; i < linesLength; i++)
            {
                if (lines[i].CheckEquals(neededLine))
                {
                    return true;
                }

            }
            return false;
        }

        bool HandleNand(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (nand)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        BitLine.Nand(lines[i], lines[j], lines[listLength]);
                        if (Solve(lines, listLength + 1, false, nor, xor, decoder, neededLine))
                        {
                            return true;
                        }
                    }
                }
            }
            return false;
        }

        bool HandleXor(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (xor)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        BitLine.Xor(lines[i], lines[j], lines[listLength]);
                        if (Solve(lines, listLength + 1, nand, nor, false, decoder, neededLine))
                        {
                            return true;
                        }

                    }
                }
            }
            return false;
        }

        bool HandleNor(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (nor)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        for (int k = j; k < listLength; k++)
                        {
                            BitLine.Nor(lines[i], lines[j], lines[k], lines[listLength]);
                            if (Solve(lines, listLength + 1, nand, false, xor, decoder, neededLine))
                            {
                                return true;
                            }

                        }
                    }
                }
            }
            return false;
        }

        bool HandleDecoder(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if (decoder)
            {
                for (int i = 0; i < listLength; i++)
                {
                    for (int j = i; j < listLength; j++)
                    {
                        for (int k = j; k < listLength; k++)
                        {
                            BitLine.Decoder(lines[i], lines[j], lines[k], lines, listLength);
                            if (Solve(lines, listLength + 8, nand, nor, xor, false, neededLine))
                            {
                                return true;
                            }
                        }
                    }
                }
            }
            return false;
        }

        public bool Solve(List<BitLine> lines, int listLength, bool nand, bool nor, bool xor, bool decoder, BitLine neededLine)
        {
            if ((!nand) && (!nor) && (!xor) && (!decoder))
            {
                return CheckIfSolutionExist(lines, listLength, neededLine);
            }
            else
            {
                if (HandleNand(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                if (HandleNor(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                if (HandleXor(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                if (HandleDecoder(lines, listLength, nand, nor, xor, decoder, neededLine))
                {
                    return true;
                }
                return false;
            }
        }
    }

    class Program
    {
        public static void Main(string[] args)
        {
            List<BitLine> list = new List<BitLine>();
            var bitLineList = new BitLine[200];
            for (int i = 0; i < 200; i++) bitLineList[i] = new BitLine();

            // set input bit:
            for (int i = 0; i < 16; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    int checker = 1 << j;
                    bitLineList[j].IsActiveWhenInputIs[i] = ((checker & i) != 0);
                }
            }

            // set zero and one constant bits:
            for (int i = 0; i < 16; i++)
            {
                bitLineList[4].IsActiveWhenInputIs[i] = false;
                bitLineList[5].IsActiveWhenInputIs[i] = true;
            }

            list.AddRange(bitLineList);

            var neededBitLine = new BitLine();
            for (int i = 0; i < 16; i++)
            {
                neededBitLine.IsActiveWhenInputIs[i] = (i%7==0); // be true for any number that is devideble by 7 (0,7,14)
            }

            var solver = new Solver();
            Console.WriteLine(solver.Solve(list, 6, true, true, true, true, neededBitLine));
            Console.ReadKey();
        }
    }
}

Hy vọng lần này là một lời giải thích hợp lệ: P


6
Bạn có thể muốn bao gồm một mô tả cấp cao về cách thức loại bộ giải này hoạt động. Không rõ ràng ngay lập tức khi đọc kết xuất mã hoàn toàn không bị lỗi này.
Dave Tweed

2
Đây là một giải pháp hấp dẫn và tôi hy vọng bạn có thể cung cấp một mô tả về thuật toán. Bạn đã thực hiện bất kỳ trường hợp thử nghiệm tương tự để chứng minh phương pháp? (BTW, tôi thích tài liệu tham khảo Douglas Adams tinh tế)
Tut

2
Tôi sẽ thêm rằng tôi đã thử thuật toán này với một số trường hợp thử nghiệm mà tôi có thể kiểm tra: x == 2, x == 3, x == 4, ..., x == 11. Vì phải mất một thời gian dài để chạy, tôi nhận thấy rằng x% 3 == 0 và x% 5 == 0 cũng có thể là không thể, và tôi không thể tìm thấy câu trả lời cho cả hai. Nhưng thuật toán trả về đúng cho tất cả các trường hợp trên mà tôi đã tìm thấy một giải pháp bằng tay.
Ido Kessler

3
+1! @IdoKessler bạn có thể thử thay đổi NAND đầu vào 2 bit bằng đầu vào 2 bit NOR và kiểm tra xem phần mềm của bạn có đưa ra giải pháp không? Trong thực tế, với cổng đó, thay vì NAND, có một giải pháp.
hack tiếp theo

3
@ next-hack nó đã trả về Đúng khi tôi đổi nó sang sử dụng NOR 2 bit
Ido Kessler

8

Đây là một câu trả lời không, để loại bỏ giải pháp rõ ràng nhất.

b1b2b4bsố 8.

Như bit b2b4 là bằng nhau trong tất cả các số hợp lệ, chúng ta có thể điều về việc thực hiện biểu thức logic:

(cũng không {x= =0,x= =3,x= =6}) không (b2 xor b4)

trong đó x là { b1, b4, bsố 8 }, được thực hiện với bộ giải mã 3-8.

Tuy nhiên, đơn giản hóa biểu thức trước đó là:

(x= =0 hoặc là x= =3 hoặc là x= =6) hoặc là (b2= =b4)

đó không phải là mong đợi:

(x= =0 hoặc là x= =3 hoặc là x= =6)  (b2= =b4)

Vì lý do này, tôi nghĩ có thể xảy ra lỗi trong câu hỏi, là "không" một cổng "cũng không".


2
Có lẽ đó là sự thật, tôi cũng không tìm thấy câu trả lời.
nrofis

2
+1. Tôi tin rằng bạn đúng, và NAND nên là một NOR.
Brian Drumond

2

Một câu trả lời hợp lệ cho câu hỏi của bạn sẽ là bất kỳ mạch nào trả về luôn luôn đúng. Bởi vì nó cũng sẽ trả về true nếu các số đầu vào là 0,7 hoặc 14.

Tôi nghĩ rằng câu hỏi nên yêu cầu một mạch rõ ràng là đúng nếu các số đầu vào là 0,7 hoặc 14. Và điều đó cho kết quả sai.


2
Wow, tôi không mong đợi câu trả lời như vậy. Mạch sẽ trả về true khi và chỉ khi đầu vào là 0, 7 hoặc 14 ...
nrofis

1
chính xác như thế
Agustin Tena

2
+1 để xem thông số kỹ thuật cẩn thận. Đây là kỹ thuật xấu khi nhận được một thông số như vậy từ một khách hàng. Trong trường hợp đó, câu trả lời đúng là chỉ ra vấn đề với thông số kỹ thuật cho khách hàng và xác minh những gì họ thực sự muốn. Nhưng, đối với một câu hỏi thi, nó cho thấy suy nghĩ vượt trội, và nó cung cấp một câu trả lời rất đơn giản.
Olin Lathrop

-3

Đó là điều có thể làm được. Như một gợi ý, hai bit ở giữa là bằng nhau cho tất cả các mẫu bit này, vì vậy việc xé chúng sẽ tạo ra 0, sau đó có thể là đầu vào cho bộ giải mã với hai bit còn lại. Các cổng còn lại được áp dụng cho ba đầu ra bộ giải mã để cung cấp đầu ra bit đơn chính xác.


Đã làm điều đó. Tôi đã không tìm thấy bất kỳ sự kết hợp nào giải quyết câu hỏi ...
nrofis

Sử dụng xor để giảm bốn bit xuống còn ba bit cho bộ giải mã. Bộ giải mã sẽ có ba đầu ra là 1 cho ba mẫu phù hợp. Cũng không phải họ với nhau và sử dụng cổng nand như một biến tần.
Giăng

4
@ John ... Giải pháp của bạn mang lại 6 điều khoản sản phẩm (không xác định), 3 trong số đó không hợp lệ. Nói cách khác, mặc dù giải pháp của bạn trả về true cho 0, 7 hoặc 14; nó cũng trả về đúng cho 1, 6 hoặc 8.
Tut
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.