Thảo luận - Giải bài toán nhặt đậu của Tấm | VN-Zoom | Cộng đồng Chia Sẻ Kiến Thức Công Nghệ và Phần Mềm Máy Tính

Adblocker detected! Please consider reading this notice.

We've detected that you are using AdBlock Plus or some other adblocking software which is preventing the page from fully loading.

We don't have any banner, Flash, animation, obnoxious sound, or popup ad. We do not implement these annoying types of ads!

We need money to operate the site, and almost all of it comes from our online advertising.

Please add https://vn-z.vn to your ad blocking whitelist or disable your adblocking software.

×

Thảo luận Giải bài toán nhặt đậu của Tấm

malemkhoang

Rìu Chiến
Tam.jpg

Hôm nay dì lại bắt Tấm đi nhặt đậu. Tấm lại phải nhờ đến tôi. Lần này dì bắt Tấm phải nhặt các dòng không trùng lặp giá trị trong một tệp text ra. Tôi phân vân quá. Nhờ 500 chim sẻ vn-z giúp nhé.​
Cam.jpg

Mã:
M
A
L
E
M
K
H
O
A
N
G

Tôi nghĩ, cứ so sánh giá trị các dòng, giá trị nào là duy nhất thì nhặt ra. Không biết 500 chim sẻ vn-z có ưng ý không?​
Tamcam.jpg
 

bbkim

Mỗi người một câu chuyện
Không hiểu bác muốn làm gì. Nhưng nếu để so sánh 2 đoạn văn bản đơn giản thì có thể dùng Diffchecker hoặc Text Compare online hoặc nhiều thì thêm plugin Compare cho notepad++ để so sánh.

Tôi nghĩ, cứ so sánh giá trị các dòng, giá trị nào là duy nhất thì nhặt ra.
Còn lấy duy nhất thì làm thế này thôi chứ có cách nào khác đâu. Khác nhau cái thuật toán để tăng tốc độ so sánh thôi à.
vd: chuỗi MALEMKHOANG đi. so sánh bình thường thì là M so với A L ... G, trùng > so sánh tiếp A với A L ... G. so từng cái từng M trở đi. Lâu vì trùng nhiều lần.
Sửa lại thuật toán so sánh M từ A > G trùng thì bỏ các giá trị trùng luôn còn ALEKHOANG so sánh tiếp chuỗi mới ALEKHOANG. Nó sẽ chạy ít hơn cách từ đầu đến cuối nên nhanh hơn 1 tí.
 

lvt491

Rìu Vàng Đôi
Phải kiểu này không bác thớt

C#:
using System;
using System.Collections.Generic;
using System.IO;

namespace ConsoleApp1
{
    internal class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //Ví dụ nội dung cần kiểm tra tại file C:\\file.txt
                var duyNhat = Checking("C:\\file.txt");

                if (duyNhat.Count == 0)
                    Console.WriteLine("Khong co duy nhat");
                else
                {
                    Console.WriteLine("Cac dong duy nhat la:");
                    foreach (var item in duyNhat)
                    {
                        Console.WriteLine(item);
                    }
                }   
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadKey();
        }

        static List<string> Checking(string filePath)
        {
            //Dùng để lưu nội dung dòng làm Key và số lần xuất hiện làm Value
            var listCount = new Dictionary<string, int>();

            //Dùng để lưu các dòng là Duy nhất (xuất hiện 1 lần)
            var listUnique = new List<string>();

            //Đọc nội dung tệp tin ở filePath
            using (var reader = new StreamReader(filePath))
            {
                string line;

                //Duyệt từng dòng cho đến hết
                while ((line = reader.ReadLine()) != null)
                {
                    //Bỏ qua dòng trống không có dữ liệu
                    if (string.IsNullOrEmpty(line))
                        continue;

                    if (listCount.ContainsKey(line))
                        listCount[line]++;
                    else
                        listCount[line] = 1;
                }

                //Duyệt và lưu những dòng có Value = 1
                foreach (var item in listCount)
                {
                    if (item.Value == 1)
                        listUnique.Add(item.Key);
                }

                return listUnique;
            }
        }
    }
}
 


Top