Yêu cầu thg 8 7, 2020 8:05 SA 140 0 1
  • 140 0 1
0

Bài toán chia list số tiền thành từng nhóm thỏa mãn điều kiện...

Chia sẻ
  • 140 0 1

Xin chào mọi người!

Em có một tình huống như thế này đang loay hoay ngâm cứu mà vẫn chưa ra xin các cao nhân chỉ giáo cho em với ạ! Chuyện là vầy:

Em có một list lịch sử giao dịch với số tiền tương ứng.

List<Invoice> items = new List<Invoice>() {
                    new Invoice("808861", -45.85),
                    new Invoice("822634", -144.32),
                    new Invoice("822635", -56.63),
                    new Invoice("835308", 2970.55),
                    new Invoice("835309", 869.36),
                    new Invoice("835310", 3050.73),
                    new Invoice("835311", 657.74),
                    new Invoice("835312", 168.42),
                    new Invoice("835348", 2922.69),
                    new Invoice("835349", 324.5),
                    new Invoice("835350", 906.3),
                    new Invoice("835351", 420.21),
                    new Invoice("835352", 851.7),
                    new Invoice("838880", 158.43),
                    new Invoice("838881", 2062.46),
                    new Invoice("838882", 567.26),
                    new Invoice("838883", 40.96),
                    new Invoice("838884", 207.16),
                    new Invoice("838889", 2726.13),
                    new Invoice("838890", 29.25),
                    new Invoice("838891", 1458.28),
                    new Invoice("838892", 219.58),
                    new Invoice("839930", 2791.99),
                    new Invoice("839931", 455.47),
                    new Invoice("839932", 514.94),
                    new Invoice("839934", 666.78),
                    new Invoice("840758", -341.34),
                    new Invoice("855741", -113.55),
                    new Invoice("855973", -85.46),
                    new Invoice("866848", -39.53),
                    new Invoice("877471", -58.17),
                    new Invoice("877472", -58.17),
                    new Invoice("878790", -459.53),
                    new Invoice("892869", -6353.36)
        };

Em muốn chia các lịch sử giao dịch thành nhiều group nhỏ với điều kiện như sau:

  1. Tối đa cho mỗi group sẽ chứa 26 cái lịch sử giao dịch.
  2. Tổng số tiền trong mỗi group phải lớn hơn 0.
  3. Group cuối cùng chứa những lịch sử còn lại miễn sao vẫn thỏa điều kiện lớn hơn 0.

Dưới dây em viết bừa để tính tổng thử của giao dịch nhưng cái group cuối tổng vẫn nhỏ hơn 0 ạ.

private static void ShowSumOf26Invoice(List<Invoice> list, int from, int to)
        {
            if (list.Count > 26)
            {
                Console.WriteLine("Total amount from: " + from + " to " + to + " : " + items.GetRange(0,26).Sum(x => x.Amount));
                items.RemoveRange(from - 1, 26);
                from = from - 1 + 26;
                to = to + 26;
                ShowSumOf26Invoice(items, from, to);
            }
            else
            {
                Console.WriteLine("Total amount from: " + from + " to " + (to - 26 + items.Count) + " : " + items.Sum(x => x.Amount));
            }
        }

        static void Main(string[] args)
        {

            Console.WriteLine("Total amount: " + items.Sum(x=>x.Amount));
            int from = 1;
            int to = 26;
            ShowSumOf26Invoice(items, from, to);

            Console.WriteLine("Press any key to end the program!");
            Console.ReadKey();
        }

Xin các cao nhân và bạn bè thân hữu gần xa giúp đỡ em ạ! Em xin cám ơn!

1 CÂU TRẢ LỜI


Đã trả lời thg 8 14, 2020 6:19 SA
Đã được chấp nhận
0
Chia sẻ
Avatar TAMIX @tuananhbfs
thg 8 18, 2020 4:40 SA

bài toán này phục vụ cho vấn đề gì nhỉ?

Avatar Nguyễn Anh Duy @anhduynguyen020595
thg 8 18, 2020 8:01 SA

@tuananhbfs Dạ bài toán này để tạo file thanh toán gửi tới ngân hàng ạ! Nhưng ngân hàng yêu cầu phải gửi file có yêu cầu như đề bài.

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí