Untitled

 avatar
unknown
csharp
6 days ago
2.9 kB
2
Indexable
using System;
using System.Collections.Generic;
using System.Linq;

public class BaiTap53
{
    public static void Main(string[] args)
    {
        Console.OutputEncoding = System.Text.Encoding.UTF8;
        Console.InputEncoding = System.Text.Encoding.UTF8;

        Console.WriteLine("In ma trận vuông theo đường xoắn ốc");

        int capN;
        double[,] maTranVuong;

        Console.Write("Nhập cấp N của ma trận vuông (N > 0): ");
        while (!int.TryParse(Console.ReadLine(), out capN) || capN <= 0)
        {
            Console.Write("Cấp ma trận không hợp lệ. Nhập lại N: ");
        }

        maTranVuong = new double[capN, capN];

        Console.WriteLine("\nNhập các phần tử của ma trận vuông:");
        for (int i = 0; i < capN; i++)
        {
            for (int j = 0; j < capN; j++)
            {
                Console.Write($"Nhập phần tử maTran[{i},{j}]: ");
                while (!double.TryParse(Console.ReadLine(), out maTranVuong[i, j]))
                {
                    Console.Write($"Giá trị không hợp lệ. Nhập lại maTran[{i},{j}]: ");
                }
            }
        }

        Console.WriteLine("\n--- KẾT QUẢ IN XOẮN ỐC ---");

        List<double> ketQuaXoanOc = new List<double>();
        int hangBatDau = 0, hangKetThuc = capN - 1;
        int cotBatDau = 0, cotKetThuc = capN - 1;

        while (hangBatDau <= hangKetThuc && cotBatDau <= cotKetThuc)
        {
            // 1. Duyệt hàng trên cùng từ trái sang phải
            for (int j = cotBatDau; j <= cotKetThuc; j++)
            {
                ketQuaXoanOc.Add(maTranVuong[hangBatDau, j]);
            }
            hangBatDau++; // Di chuyển biên trên xuống

            // 2. Duyệt cột phải cùng từ trên xuống dưới
            for (int i = hangBatDau; i <= hangKetThuc; i++)
            {
                ketQuaXoanOc.Add(maTranVuong[i, cotKetThuc]);
            }
            cotKetThuc--; // Di chuyển biên phải vào

            // 3. Duyệt hàng dưới cùng từ phải sang trái (nếu còn hàng)
            if (hangBatDau <= hangKetThuc)
            {
                for (int j = cotKetThuc; j >= cotBatDau; j--)
                {
                    ketQuaXoanOc.Add(maTranVuong[hangKetThuc, j]);
                }
                hangKetThuc--; // Di chuyển biên dưới lên
            }

            // 4. Duyệt cột trái cùng từ dưới lên trên (nếu còn cột)
            if (cotBatDau <= cotKetThuc)
            {
                for (int i = hangKetThuc; i >= hangBatDau; i--)
                {
                    ketQuaXoanOc.Add(maTranVuong[i, cotBatDau]);
                }
                cotBatDau++; // Di chuyển biên trái vào
            }
        }

        Console.WriteLine(string.Join(", ", ketQuaXoanOc));
    }
}
Editor is loading...
Leave a Comment