Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define MAX 100
- using namespace std;
- int arrMain[MAX][MAX];
- int m, n;
- //Hàm này tạo 1 số random trong khoảng từ a đến b, dùng để khởi tạo giá trị cho mảng để test, khỏi mất công nhập :D
- int cRand(int a, int b){
- return rand() % (b - a + 1) + a;
- }
- //Hàm này để khởi tạo mảng kích thước mxn rồi gán giá trị random
- void createArr(){
- for (int i = 0; i < m; i++){
- for (int j = 0; j < n; j++){
- arrMain[i][j] = cRand(1, 99);
- }
- }
- }
- //Hiển thị mảng theo kiểu thông thường
- void Show(){
- for (int i = 0; i < m; i++){
- for (int j = 0; j < n; j++){
- if (arrMain[i][j] >= 10)
- cout << arrMain[i][j] << " ";
- else
- cout << " " << arrMain[i][j] << " ";
- }
- cout << endl;
- }
- }
- //Đọc mảng xoắn ốc theo chiều kim đồng hồ, in ra màn hình theo thứ tự xoắn ốc
- void ShowXoanOc(){
- //t: top-biến kiểm soát giới hạn trên
- //b: bottom-biến kiểm soát giới hạn dưới
- //l: left-biến kiểm soát giới hạn trái
- //r: right-biến kiểm soát giới hạn phải
- int t=0, b = m, l=0, r = n;
- //cnt: count-biến đếm số lượng phần tử đã duyệt được
- //num: number-biến lưu số lượng phần tử của mảng
- int cnt=0, num = m*n;
- //Tiến hành duyệt từng phần tử theo thứ tự vòng xoắn
- while (cnt < num){
- //Vòng for này duyệt theo chiều từ trái qua phải
- for (int i = l; i < r; i++){
- cout << arrMain[t][i] << " ";
- cnt++;
- }
- t++;//tăng giá trị top lên 1 đơn vị, tức là đã duyệt xong dòng t
- //Vòng for này duyệt từ trên xuống dưới
- for (int i = t; i < b; i++){
- cout << arrMain[i][r-1] << " ";
- cnt++;
- }
- r--;//Sau khi duyệt xong cột ở bên phải thì giảm giá trị đi 1 để cột bên phải tiếp theo là cột ở bên trong
- //Vòng for này duyệt từ phải qua trái ở phía dưới của mảng
- for (int i = r-1; i>=l; i--){
- cout << arrMain[b - 1][i] << " ";
- cnt++;
- }
- b--;//Giảm giá trị biến bottom, dịch chuyển dòng cần duyệt lên trên
- //Vòng for này duyệt từ dưới lên trên ở bên trái của mảng
- for (int i = b-1; i >= t; i--){
- cout << arrMain[i][l] << " ";
- cnt++;
- }
- l++;//Tăng giá trị left, cột bên trái tiếp theo là cột ở bên trong
- }
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- cout << "Nhap kich thuoc: (Hang/Cot) "; cin >> m >> n;
- createArr();
- Show();
- cout << endl << endl;
- ShowXoanOc();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment