cuốn sách gpt4 ai đã làm

c - 4 biến ánh xạ tới mảng

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-04 00:55:40 25 4
mua khóa gpt4 Nike

Mình cần chọn một mục mảng dựa trên giá trị của 4 biến như hình dưới đây, trong C.

  0 | 1 | 0 | -1 |
-1 | 0 | 1 | 0 |
0 | -1 | 0 |
1 | 0 | -1 | 0 |

1 | 0 | 0 | -1 |
1 | 0 | 0 | 1 |
-1 | 0 | 0 | 1 |
-1 | 0 | 0 | -1 |

0 | 1 | -1 | 0 |
0 | 1 | 1 | 0 |
0 | -1 | 1 | 0 |
0 | -1 | -1 | 0 |

(Thứ tự của cột thứ hai trong mảng không quan trọng và có thể sắp xếp lại nếu cần thiết.)

Mặc dù xếp tất cả các khả năng vào chuỗi 12 nếu như là có thể (và hoàn toàn có thể chấp nhận được), nhưng tôi muốn xem liệu có ai có thể đưa ra giải pháp "sạch hơn" không.

biên tập: Để làm rõ: Tôi muốn một chức năng f(a,b,c,d) Trong số đó (ví dụ)f(0, 1, 0, -1) Quay lại để lưu vào mảng[1][0] giá trị trong .

câu trả lời hay nhất

Để giải thích dễ dàng hơn, tôi đã mô tả giải pháp này theo cách kém hiệu quả hơn một chút; phiên bản ngắn gọn hơn có thể dễ dàng suy ra từ những gì tôi đã trình bày ở đây.

Ánh xạ các giá trị -1, 0 và 1 thành 0x00, 0x01 và 0x02 và lưu trữ chúng ở giá trị 8 bit sử dụng 2 bit cho mỗi giá trị, ví dụ: các giá trị mảng của bạn tương ứng với các số sau:

mảng [1] [0]: giá trị nhị phân 01100100 = 0x64
mảng [1] [1]: giá trị nhị phân 00011001 = 0x19
mảng [1] [2]: giá trị nhị phân 01000110 = 0x46
mảng [1] [3]: giá trị nhị phân 10010001 = 0x91

Tạo một mảng cho tất cả 255 giá trị có thể được giữ trong một giá trị 8 bit duy nhất (lưu ý rằng một số mục sẽ không được sử dụng, tức là với bất kỳ hai bit nào được đặt thành 1 - đây là tính không hiệu quả mà tôi đã đề cập).

例如

array[0] trỏ đến mảng thích hợp cho -1, -1, -1, -1
array[1] trỏ đến mảng thích hợp cho -1, -1, -1, 0
array[2] trỏ đến mảng thích hợp cho -1, -1, -1, 1
mảng [3] không có điểm nào

array[4] trỏ đến mảng thích hợp cho -1, -1, 0, -1
array[5] trỏ đến mảng thích hợp cho -1, -1, 0, 0
array[6] trỏ đến mảng thích hợp cho -1, -1, 0, 1
mảng [7] không có điểm nào

(v.v., rõ ràng)

Sau đó, bạn chỉ cần tra cứu, không lặp lại và lấy đúng mảng (hoặc bất cứ thứ gì bạn muốn đặt vào đó).

Trong một giải pháp sạch hơn, bảng không có mục nào trỏ vào đâu cả.

biên tập:

Trong trường hợp này, sử dụng mảng ở trên, hàm được yêu cầu là:

f(a,b,c,d) {
trả về mảng[(a+1) << 6 + (b+1) << 4 + (c+1) << 2 + (d+1)];
}

Về ánh xạ biến C-4 vào mảng, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/3866486/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress