Hỏi Về Cách Dùng 1 Vòng Lặp Duyệt Mảng 2 Chiều - Dạy Nhau Học Trang chủ » Duyệt Mảng 2 Chiều » Hỏi Về Cách Dùng 1 Vòng Lặp Duyệt Mảng 2 Chiều - Dạy Nhau Học Có thể bạn quan tâm Duyệt Mảng 2 Chiều C# Duyệt Mảng 2 Chiều Java Duyệt Mảng 2 Chiều Php Duyệt Mảng 2 Chiều Python Duyệt Mảng 2 Chiều Trong Javascript Hỏi về cách dùng 1 vòng lặp duyệt mảng 2 chiều programming algorithm nhatlonggunz (nhatlonggunz) February 25, 2015, 10:04am #1 Đối với người biết cách dùng 1 vòng lặp duyệt mảng 2 chiều. Mọi người cho em hỏi về cái này ạ, em mới nghe lần đầu. Cách này làm thế nào ? Nhanh hay chậm hơn so với cách dùng 2 vòng lặp? Nên dùng cách này hay cách cũ (vì trước giờ em chưa thấy ai nói hay làm kiểu này). Cám ơn mọi người ạ Hỏi code về mảng 2 chiều TTmagic (TTmagic) February 25, 2015, 10:08am #2 làm được, nhưng không nên làm, vì nó hại não 1 Like Gio (Gió) February 25, 2015, 10:15am #3 Em có thể dùng 1 vòng lặp bằng cách tính chỉ số của nó theo thứ tự duyệt: Giả sử mảng kích thước m*n mang[i][j] <=> thứ tự = i*n+j duyệt bằng 1 vòng for: for (k =0;k< m*n;++k){ i=k/n; j=k%n; } 2 Likes ltd (Lê Trần Đạt) February 25, 2015, 10:31am #4 Confirm là không ai “rảnh” làm như thế này nhé. #include <stdio.h> int main() { int arr[3][3] = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }; // Print value using double for loop for(int i = 0; i < 3; ++i) { for(int j = 0; j < 3; ++j) { printf("%d ", arr[i][j]); } printf("\n"); } // Print address using double for loop for(int i = 0; i < 3; ++i) { for(int j = 0; j < 3; ++j) { printf("%p ", &arr[i][j]); } printf("\n"); } // Print value using single for loop int *pa = arr; for(int i = 0; i < 3*3; ++i) { printf("%d ", *(pa+i)); if ( (i + 1) % 3 == 0 ) printf("\n"); } // Print address using print address for(int i = 0; i < 3*3; ++i) { printf("%p ", pa+i); if ( (i + 1) % 3 == 0 ) printf("\n"); } } 1 Like nhatlonggunz (nhatlonggunz) February 25, 2015, 2:32pm #5 ltd: Confirm là không ai “rảnh” làm như thế này nhé. Là sao anh, em không hiểu ý anh nói. ltd (Lê Trần Đạt) February 25, 2015, 2:43pm #6 Ý là anh viết chương trình mẫu sử dụng một vòng lặp để lặp qua mảng 2 chiều rồi đấy, em xem thử đi. Nhưng mà không có ai làm như vậy cả. Chương trình anh viết chỉ là demo thôi nhatlonggunz (nhatlonggunz) February 25, 2015, 2:45pm #7 Vậy mình có nên dùng cách đó không anh, và cách đó có tối ưu hơn (chạy nhanh hơn) cách 2 vòng lặp không ? ltd (Lê Trần Đạt) February 25, 2015, 2:46pm #8 Không tối ưu hơn đâu @nhatlonggunz Mà code phức tạp, nhiều khả năng gây ra lỗi. 1 Like BreakDown (there're only 10 types of people in the world: Those who understand binary & those who dont) February 25, 2015, 2:57pm #9 Cách tối ưu thì được mọi người dùng nhiều, vậy cách dùng 1 vòng lặp có tối ưu không crossover February 25, 2015, 4:23pm #10 Người ta chỉ sử dụng mảng 1 chiều thay cho mảng 2 chiều và có thể dùng 1 vòng for duyệt hết cả mảng. Ví dụ đơn giản để tạo mảng 1 chiều mà sử dụng như mảng 2 chiều như thế này. #include<iostream> using namespace std; // bien extern int const ROWS = 2; extern int const COLS = 2; extern int const MATRIX[ROWS*COLS] = { 1 , 2 , 3, 4}; // thay cho mang 2x2 // lay gia tri cua matrix theo hang va cot int matrix(int row, int col) { assert(row >= 0 && row < ROWS); assert(col >= 0 && col < COLS); return MATRIX[(row*COLS) + col]; } int main() { cout<<"matrix[0][0] = "<<matrix(0,0)<<endl; cout<<"matrix[0][1] = "<<matrix(0,1)<<endl; cout<<"matrix[1][0] = "<<matrix(1,0)<<endl; cout<<"matrix[1][1] = "<<matrix(1,1)<<endl; return 0; } htwap (lu___va_sa__) February 25, 2015, 11:51pm #11 cái này trước làm mảng động 2 chiều dùng con trỏ e từng làm nè, nhưng thầy giáo hướng dẫn lại cách chạy 2 vòng for. thật ra thì 2 vòng này như nhau, đều có độ phức tạp o(n^2) nhỉ. 1 Like ninedog (lâm phúc tài) February 26, 2015, 4:22pm #12 ltd: double for loop Cho em hỏi cái trên ý nghĩa là gì ạ nhatlonggunz (nhatlonggunz) February 26, 2015, 5:04pm #13 Là 2 vòng for, dùng từ double, có nghĩa là đôi, ý muốn nói 2 vòng for đi đôi với nhau (hay ta gọi là lồng nhau) 1 Like TuNhienQuen (Tự Nhiên Quên) February 26, 2015, 6:38pm #14 em cũng đang băng khoăn nên em có viết 1 bài anh dành thời gian xem được không cảm ơn anh http://daynhauhoc.com/t/cach-nhanh-co-that-su-nhanh-trong-sap-xep-mang-2-chieu/4293 DayNhauHoc's Discord Học C++ Free? Click Blog Dạy Nhau Học Tự Học Lập Trình 83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao? Từ khóa » Duyệt Mảng 2 Chiều Duyệt Mảng 2 Chiều Trong JavaScript 5.3 Mảng Hai Chiều - Khóa Học C++ Bài 54. Mảng 2 Chiều Trong C - Lập Trình Không Khó Hỏi Về Cách Dùng 1 Vòng Lặp Duyệt Mảng 2 Chiều Các Kỹ Thuật Lập Trình Với Mảng 2 Chiều Và Minh Họa Với C++ Các Thuật Toán Cơ Bản Về Mảng Hai Chiều - IViettech Mảng Hai Chiều - Mảng Đa Chiều Trong C++ - CodeLearn Mảng 2 Chiều Trong JavaScript | Học Lập Trình JavaScript Mảng 2 Chiều 2d Array Trong C - Lập Trình Từ Đầu Mảng 2 Chiều Trong C# | How Kteam Đệ Quy Quay Lùi Mảng Hai Chiều - Tài Liệu Text - 123doc [PDF] MẢNG 2 CHIỀU (2D Array) [Lập Trình C++ Cơ Bản] Bài 7 (Phần 2): Mảng Hai Chiều Trong ... - Viblo Mảng 2 Chiều Trong Java Lý Thuyết Và Bài Tập Vận Dụng - IT For Student