• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

[Cuộc thi] Kỹ năng lập trình - Kì 2

Các đề tài, cuộc thi, chủ đề chung của diễn đàn

Điều hành viên: Điều hành

Hình đại diện của người dùng
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 94
Ngày tham gia: T.Sáu 11/12/2009 2:15 pm
Been thanked: 1 time

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi minhduc4477 » T.Hai 23/08/2010 7:59 am

Có phải một ngày chỉ có 24 giờ và 1 giờ thì có 60 phút đúng không ạ? mod Đạt! :D
Nếu là như zậy thì em trực tiếp loại bỏ những kết quả ngoài phạm vi thì có xem là dự đoán thiếu không hả mod? >:)


Tình yêu là vĩnh cữu, chỉ có người tình là thay đỗi.

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi lungocqua » T.Hai 23/08/2010 1:01 pm

Cái đề lần này khó nuốt thật. Phải cắt nhỏ ra từng phần mới mong là làm được. :|
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi VuVanHoanh » T.Hai 23/08/2010 4:27 pm

Waa, lại chuyển sang box này à? Làm mình tìm bở hơi tai, lại còn tưởng là kết thúc rồi chứ?
lungocqua đã viết:Cái đề lần này khó nuốt thật. Phải cắt nhỏ ra từng phần mới mong là làm được. :|

Cắt ra thế nào hả anh? Chỉ cho eeeeemmmm cái. Em đang bí
:(( :(( :(( :(( :(( :(( :(( :((
Since 2008...
One love! :x

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Ba 24/08/2010 8:45 pm

Hình như đề lần này khó lắm sao mà mới nhận có 2 bài à :P

NovaFooc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 307
Ngày tham gia: T.Ba 11/08/2009 3:27 pm

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi NovaFooc » T.Ba 24/08/2010 9:15 pm

mình thấy hình như cũng đâu khó lắm đâu mà, chắc tại mọi người bay cao bay xa wa :D
dạo này lại bận bịu học hành rồi, it rảnh rỗi như tháng trc nữa :)
cái này bao giờ hết hạn nhỉ :-? có hôm nào rảnh làm 1 bài tham gia cho vui
mà cai topic bị đẩy xuống sâu quá, dễ bị bỏ qua

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi lungocqua » T.Tư 25/08/2010 12:26 am

Cái này không khó hơi nhấc đầu tí thôi. Chính vì vậy cũng mất thời gian nhiều hơn. Với lại vào học rồi cũng không còn rảnh nữa. Mình mới làm được phần kiểm tra chính xác thôi. Còn mấy phần kia sao mà thấy vướng mắc quá. Mong rằng vẫn chưa hết hạn. :(
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Tư 25/08/2010 11:05 am

OK, bài này mình để đến hết chủ nhật tuần này ;) Tuần này mình cũng hơi bận nữa :D

Hình đại diện của người dùng
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Bài viết: 1259
Ngày tham gia: T.Năm 03/06/2010 9:23 pm
Đến từ: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 time
Been thanked: 137 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi VuVanHoanh » T.Tư 25/08/2010 4:22 pm

Anh ơi chủ nhật hết hạn àh?
Sau khi chấm bài xong thì post bài hay nhất lên cho anh em xem nhé. Để học hỏi ấy mà
Since 2008...
One love! :x

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi lungocqua » T.Tư 25/08/2010 7:08 pm

vo_minhdat2007 đã viết:OK, bài này mình để đến hết chủ nhật tuần này ;) Tuần này mình cũng hơi bận nữa :D

Vậy thì còn gì bằng! :)
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
Bài viết: 94
Ngày tham gia: T.Sáu 11/12/2009 2:15 pm
Been thanked: 1 time

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi minhduc4477 » CN 29/08/2010 6:43 am

[mod=vo_minhdat2007]Ở kì này, bạn minhduc4477 có nhã ý tài trợ cho cuộc thi, quà được gửi qua bưu điện nên các bạn vui lòng gửi kèm địa chỉ khi gửi bài dự thi[/mod]

Các bạn tranh thủ, cố gắng nha! Giải thưỡng sẽ vô cùng thú vị đấy!!! :D
Có lẽ mình sẽ Offline dài hạn. Mod Đạt khi nào trao giải thì PM bằng Email: Darkness.love@rocketmail.com. Mình sẽ dùng điện thoại kiểm tra email thường xuyên.
Tình yêu là vĩnh cữu, chỉ có người tình là thay đỗi.

NovaFooc
Thành viên tâm huyết
Thành viên tâm huyết
Bài viết: 307
Ngày tham gia: T.Ba 11/08/2009 3:27 pm

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi NovaFooc » CN 29/08/2010 3:33 pm

mod Đạt đã nhận đc bài của mình chưa nhỉ ?
sao k0 thấy update danh sách thí sinh nữa za :-/

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Hai 30/08/2010 11:17 am

Danh sách bài nhận được mình post ở topic đầu để tránh rác chủ đề.

Mình bận quá nên chắc thứ 4 mới chấm được, các bạn thông cảm nha ;)

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi lungocqua » T.Hai 30/08/2010 12:24 pm

Có đáp án chưa vậy? :-/
Lần sau cho đề dễ tí để có nhiều bạn tham gia hơn. :)
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi lungocqua » T.Năm 02/09/2010 1:21 pm

Có đán áp sao mà thấy im re vậy? Không ai cho ý kiến gì sao? :D
Ta đã trở lại và quên hết tất cả! :D

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 02/09/2010 2:28 pm

Bài của bạn lungocqua:

Code:

  1. Imports System.Drawing
  2. Imports System.IO
  3. Imports System.Xml
  4. Public Class Form1
  5.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  6.         Dim x As Byte = 1, na As Byte = 0
  7.         For a As Byte = 0 To 250 Step 60
  8.             x = x + 1
  9.             Dim y As Byte = 1
  10.             For b As Byte = 30 To 250 Step 16
  11.                 y = y + 1
  12.                 Dim z As Byte = 1
  13.                 For c As Byte = 30 To 100 Step 16
  14.                     z = z + 1
  15.                     Dim chk As New CheckBox
  16.                     na = na + 1
  17.                     chk.Name = "c" & na
  18.                     chk.TabStop = False
  19.                     chk.Size = New Size(13, 13)
  20.                     chk.Location = New Point(b + a, c)
  21.                     Controls.Add(chk)
  22.                     '1 cột = 5 dòng
  23.                     If z > 5 Then Exit For
  24.                 Next
  25.                 '3 cột
  26.                 If y > 3 Then Exit For
  27.             Next
  28.             '4 số
  29.             If x > 4 Then Exit For
  30.         Next
  31.         For c As Byte = 47 To 100 Step 32
  32.             Dim rad As New RadioButton
  33.             rad.Size = New Size(14, 13)
  34.             rad.Location = New Point(136, c)
  35.             rad.Checked = True
  36.             rad.TabStop = False
  37.             Controls.Add(rad)
  38.         Next
  39.     End Sub
  40.  
  41.     Private Sub bntNhap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntNhap.Click
  42.         If OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
  43.             Dim xml_doc As New XmlDataDocument, xml_node As XmlNodeList
  44.             Dim fs As New FileStream(OpenFileDialog1.FileName, FileMode.Open, FileAccess.Read)
  45.             xml_doc.Load(fs)
  46.             xml_node = xml_doc.GetElementsByTagName("CheckBox")
  47.             If xml_node.Count > 0 Then
  48.                 For i As Byte = 0 To xml_node.Count - 1
  49.                     For j As Byte = 0 To xml_node(i).ChildNodes.Count - 1
  50.                         CType(Me.Controls.Item(j + 7), CheckBox).Checked = CBool(xml_node(i).ChildNodes(j).InnerText)
  51.                     Next
  52.                 Next
  53.                 fs.Close()
  54.                 fs.Dispose()
  55.                 xml_doc = Nothing
  56.                 xml_node = Nothing
  57.                 MsgBox("Đã nhập xong dữ liệu từ " & OpenFileDialog1.FileName, MsgBoxStyle.Information)
  58.             End If
  59.         End If
  60.     End Sub
  61.  
  62.     Private Sub bntXuat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntXuat.Click
  63.         If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
  64.             Dim wrxml As New XmlTextWriter(SaveFileDialog1.FileName, System.Text.Encoding.UTF8)
  65.             wrxml.WriteStartDocument()
  66.             wrxml.Formatting = Formatting.Indented
  67.             wrxml.WriteStartElement("CheckBox")
  68.             For i As Byte = 0 To 59
  69.                 If i > 9 Then
  70.                     wrxml.WriteStartElement("CheckBox" & i + 1)
  71.                 Else
  72.                     wrxml.WriteStartElement("CheckBox0" & i + 1)
  73.                 End If
  74.                 wrxml.WriteName(CType(Me.Controls.Item(i + 7), CheckBox).Checked)
  75.                 wrxml.WriteEndElement()
  76.             Next
  77.             wrxml.WriteEndElement()
  78.             wrxml.Flush()
  79.             wrxml.Close()
  80.             wrxml = Nothing
  81.             MsgBox("Đã ghi xong " & SaveFileDialog1.FileName, MsgBoxStyle.Information)
  82.         End If
  83.     End Sub
  84.  
  85.     Private Sub bntDudoant_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntDudoant.Click
  86.         LienKet_HienThi(1, txtDudoant)
  87.     End Sub
  88.  
  89.     Private Sub bntDudoang_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bntDudoang.Click
  90.         LienKet_HienThi(2, txtDudoang)
  91.     End Sub
  92.  
  93. #Region "Kiểm tra tổng quan"
  94.     'Nếu hàm trả về là True thì sẽ kiểm tra số chính xác
  95.     Function KiemTraTongQuan(ByVal DS As List(Of Boolean), ByVal ViTri As String) As Boolean
  96.         Dim Check_True, Check_False As New ArrayList, KT As Boolean
  97.         Check_True.AddRange(Split(ViTri, ","))
  98.         For n As Byte = 0 To Check_True.Count - 1
  99.             If DS(Val(Check_True(n))) = False Then
  100.                 KT = True
  101.             End If
  102.         Next
  103.         If KT = False Then
  104.             Return True
  105.         End If
  106.     End Function
  107. #End Region
  108. #Region "Kiểm tra chính xác"
  109.     'Danh sách vị trí UnCheck của các số 0->9
  110.     Dim ChuoiSo As String = "6, 7, 8; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9; 1, 6, 8, 13; 1, 3, 6, 8; 3, 4, 5, 6, 8, 9; 3, 6, 8, 11; 6, 8, 11; 1, 2, 3, 4, 6, 7, 8, 9; 6, 8; 3, 6, 8"
  111.     'Nếu NÓ chính xác sẽ trả về True
  112.     Function KiemTraChinhXac(ByVal DS As List(Of Boolean), ByRef So As Byte) As Boolean
  113.         Dim DS_so, Check_True, Check_False As New ArrayList, KT As Boolean
  114.         DS_so.AddRange(Split(ChuoiSo, ";"))
  115.         '10 chữ số
  116.         If DS_so.Count = 10 Then
  117.             For i As Byte = 0 To 9
  118.                 KT = False
  119.                 Check_False.Clear()
  120.                 Check_True.Clear()
  121.                 Check_False.AddRange(Split(DS_so(i), ","))
  122.                 Check_True = CacViTri_False(Check_False)
  123.                 KiemTraViTri(DS, Check_True, False, KT)
  124.                 KiemTraViTri(DS, Check_False, True, KT)
  125.                 If KT = False Then
  126.                     So = i
  127.                     Return True
  128.                 End If
  129.             Next
  130.         End If
  131.     End Function
  132. #End Region
  133. #Region "Kiểm tra số thiếu"
  134.     'Danh sách vị trí UnCheck của số 1
  135.     Dim SoThieu As String = "0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 13; 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 14"
  136.     Function KiemTraSoThieu(ByVal DS As List(Of Boolean)) As Boolean
  137.         Dim DS_Thieu, Check_True, Check_False As New ArrayList, KT As Boolean
  138.         DS_Thieu.AddRange(Split(SoThieu, ";"))
  139.         For i As Byte = 0 To DS_Thieu.Count - 1
  140.             KT = False
  141.             Check_True.Clear()
  142.             Check_False.Clear()
  143.             Check_False.AddRange(Split(DS_Thieu(i), ","))
  144.             Check_True = CacViTri_False(Check_False)
  145.             KiemTraViTri(DS, Check_True, False, KT)
  146.             KiemTraViTri(DS, Check_False, True, KT)
  147.             If KT = False Then
  148.                 Return True
  149.             End If
  150.         Next
  151.     End Function
  152. #End Region
  153. #Region "Kiểm tra gần"
  154.     Function DanhSachSoGan(ByVal So As Byte) As String
  155.         Dim ChuoiCacSo As String = ""
  156.         Select Case So
  157.             Case 0
  158.                 ChuoiCacSo = "0,6,7,8;1,6,7,8;2,6,7,8;3,6,7,8;4,6,7,8;5,6,7,8;10,6,7,8;11,6,7,8;12,6,7,8;13,6,7,8;14,6,7,8;0,1,6,7,8;0,2,6,7,8;0,3,6,7,8;0,4,6,7,8;0,5,6,7,8;0,10,6,7,8;0,11,6,7,8;0,12,6,7,8;0,13,6,7,8;0,14,6,7,8;0,2,6,7,8,14;0,1,2,6,7,8;6,7,8,10,12,14;4,5,6,7,8;7,8;6,7;2,6,7,8,12;2,6,12;5,6,7,8,9,12;0,5,6,7,8,9,12"
  159.             Case 1
  160.                 ChuoiCacSo = "0,1,2,3,4,5,6,7,8,9,10,11;0,1,2,3,4,5,6,7,8,9,11,12;0,1,2,3,4,5,6,7,8,9,12,13;0,1,2,3,4,5,6,7,8,9,13,14;0,1,2,3,4,5,6,7,8,9,11,13;0,1,2,3,4,5,6,7,8,9,12,14;0,1,2,3,4,5,6,7,8,9,10,12,14;0,1,2,3,4,5,6,7,8,9,10,11,12;0,1,2,3,4,5,6,7,8,9,11,12,13;0,1,2,3,4,5,6,7,8,9,11,12,13,14;0,1,2,3,4,5,6,7,8,9,10,12,13,14"
  161.             Case 2
  162.                 ChuoiCacSo = "0,1,2,8,13;1,5,6,8,13;1,6,8,10,13;1,6,8,11,13;1,6,8,12,13;1,6,7,8,13;1,2,6,8,13;1,4,6,8,13;1,6,8,9,13;1,6,8,13"
  163.             Case 3
  164.                 ChuoiCacSo = "0,1,3,6,8;1,3,5,6,8;1,3,6,8,10;1,3,6,8,11;1,3,6,8,12;1,3,4,6,8;1,3,6,8,9;1,3,6,8,14;1,3,6;1,3,8;1,3"
  165.             Case 4
  166.                 ChuoiCacSo = "0,3,4,5,6,8,9;1,3,4,5,6,8,9;2,3,4,5,6,8,9;3,4,5,6,7,8,9;3,4,5,6,8,9,10;3,4,5,6,8,9,11;3,4,5,6,8,9,12;3,4,5,6,8,9,13;3,5,6,8,9,14;1,3,4,5,6,8,9,11;1,3,4,5,6,8,9,11,14"
  167.             Case 5
  168.                 ChuoiCacSo = "0,3,6,8,11;1,3,6,8,11;2,3,6,8,11;3,6,7,8,11;3,6,8,11,12;3,6,8,11,13;3,6,8,11,14;3,6,8,11,13,14;3,6,8,9,11,13;3,4,6,8,9,11;3,5,6,8,9,11;3,4,6,8,10,11;1,3,6,8,10,11,14"
  169.             Case 6
  170.                 ChuoiCacSo = "6,8,10,11;5,6,8,11;6,11;2,6,11;1,6,11;3,6,11;4,6,11;6,8,9,11;6,8,11,14;6,8,11,13"
  171.             Case 7
  172.                 ChuoiCacSo = "1,2,3,4,5,6,7,8,9;1,2,3,4,6,7,8,9,10;1,2,4,6,7,8,9,11;1,2,3,6,7,8,9,13;1,2,3,4,6,7,8,9,13,14;1,2,3,4,6,7,8,9,11,13;1,2,3,4,6,7,8,9,13;1,2,3,4,6,7,8,9,14;1,2,3,4,6,8,9,12"
  173.             Case 8
  174.                 ChuoiCacSo = "6;8;3,6,8;6,8,9,14"
  175.             Case 9
  176.                 ChuoiCacSo = "3,4,6,8;3,6,8,9;3,6,8,14;3,6,8,10;1,3,6,8;3,6,8,12;3,6,8,11"
  177.         End Select
  178.         Return ChuoiCacSo
  179.     End Function
  180.     Function KiemTraSoGan(ByVal DS As List(Of Boolean), ByRef So As Byte) As Boolean
  181.         Dim DSChinh, Check_True, Check_False As New ArrayList, KT As Boolean
  182.         For i As Byte = 0 To 9
  183.             DSChinh.Clear()
  184.             DSChinh.AddRange(Split(DanhSachSoGan(i), ";"))
  185.             For n As Byte = 0 To DSChinh.Count - 1
  186.                 KT = False
  187.                 Check_False.Clear()
  188.                 Check_True.Clear()
  189.                 Check_False.AddRange(Split(DSChinh(n), ","))
  190.                 Check_True = CacViTri_False(Check_False)
  191.                 KiemTraViTri(DS, Check_True, False, KT)
  192.                 KiemTraViTri(DS, Check_False, True, KT)
  193.                 If KT = False Then
  194.                     So = i
  195.                     Return True
  196.                 End If
  197.             Next
  198.         Next
  199.     End Function
  200. #End Region
  201. #Region "Các hàm & thủ tục khác"
  202.     Sub LienKet_HienThi(ByVal Nut As Byte, ByVal txt As TextBox)
  203.         Dim vtDau() As Byte = {7, 22, 37, 52}
  204.         Dim vtCuoi() As Byte = {21, 36, 51, 66}
  205.         Dim So(3) As Byte
  206.         Dim ktChinhXac(3), ktThieu(3), ktGan(3) As Boolean
  207.         For i As Byte = 0 To 3
  208.             If KiemTraTongQuan(DanhSachCheck(vtDau(i), vtCuoi(i)), "10, 12, 14") = True Then
  209.                 'Kiểm tra chính xác
  210.                 If KiemTraChinhXac(DanhSachCheck(vtDau(i), vtCuoi(i)), So(i)) = False Then
  211.                     ktChinhXac(i) = True
  212.                     Select Case Nut
  213.                         Case 1
  214.                             KiemTraThieuGan(Nut, vtDau(i), vtCuoi(i), So(i), ktThieu(i))
  215.                         Case 2
  216.                             KiemTraThieuGan(Nut, vtDau(i), vtCuoi(i), So(i), ktGan(i))
  217.                     End Select
  218.                 End If
  219.             Else
  220.                 ktChinhXac(i) = True
  221.                 Select Case Nut
  222.                     Case 1
  223.                         KiemTraThieuGan(Nut, vtDau(i), vtCuoi(i), So(i), ktThieu(i))
  224.                     Case 2
  225.                         KiemTraThieuGan(Nut, vtDau(i), vtCuoi(i), So(i), ktGan(i))
  226.                 End Select
  227.             End If
  228.         Next
  229.         Select Case Nut
  230.             Case 1
  231.                 If So(0) > 2 Or So(2) > 5 Then
  232.                     txt.Text = "##:##"
  233.                     Exit Select
  234.                 End If
  235.                 If (ktChinhXac(0) = False And ktChinhXac(1) = False) AndAlso (ktChinhXac(2) = False And ktChinhXac(3) = False) Then
  236.                     txt.Text = So(0) & So(1) & ":" & So(2) & So(3) & " (Chính xác)"
  237.                 Else
  238.                     If (ktThieu(0) = False And ktThieu(1) = False) AndAlso (ktThieu(2) = False And ktThieu(3) = False) Then
  239.                         txt.Text = So(0) & So(1) & ":" & So(2) & So(3)
  240.                     Else
  241.                         txt.Text = "##:##"
  242.                     End If
  243.                 End If
  244.             Case 2
  245.                 If So(0) > 2 Or So(2) > 5 Then
  246.                     txt.Text = "##:##"
  247.                     Exit Select
  248.                 End If
  249.                 If (ktChinhXac(0) = False And ktChinhXac(1) = False) AndAlso (ktChinhXac(2) = False And ktChinhXac(3) = False) Then
  250.                     txt.Text = So(0) & So(1) & ":" & So(2) & So(3) & " (Chính xác)"
  251.                 Else
  252.                     If (ktGan(0) = False And ktGan(1) = False) AndAlso (ktGan(2) = False And ktGan(3) = False) Then
  253.                         txt.Text = So(0) & So(1) & ":" & So(2) & So(3)
  254.                     Else
  255.                         txt.Text = "##:##"
  256.                     End If
  257.                 End If
  258.         End Select
  259.     End Sub
  260.     Sub KiemTraThieuGan(ByVal Nut As Byte, ByVal vtDau As Byte, ByVal vtCuoi As Byte, ByRef So As Byte, ByRef KT As Boolean)
  261.         Select Case Nut
  262.             Case 1
  263.                 So = 1
  264.                 If KiemTraSoThieu(DanhSachCheck(vtDau, vtCuoi)) = False Then
  265.                     KT = True
  266.                 End If
  267.             Case 2
  268.                 If KiemTraSoGan(DanhSachCheck(vtDau, vtCuoi), So) = False Then
  269.                     KT = True
  270.                 End If
  271.         End Select
  272.     End Sub
  273.     Sub KiemTraViTri(ByVal DS As List(Of Boolean), ByVal Check_T_F As ArrayList, ByVal T_F As Boolean, ByRef KT As Boolean)
  274.         For n As Byte = 0 To Check_T_F.Count - 1
  275.             If DS(Val(Check_T_F(n))) = T_F Then
  276.                 KT = True
  277.             End If
  278.         Next
  279.     End Sub
  280.     Function DanhSachCheck(ByVal ViTriDau As Byte, ByVal ViTriCuoi As Byte) As List(Of Boolean)
  281.         Dim DS As New List(Of Boolean)
  282.         For i As Byte = ViTriDau To ViTriCuoi
  283.             DS.Add(CBool(CType(Me.Controls.Item(i), CheckBox).Checked))
  284.         Next
  285.         Return DS
  286.     End Function
  287.     Function CacViTri_False(ByVal ViTri_False As ArrayList) As ArrayList
  288.         Dim VT_True As New ArrayList
  289.         For i As Byte = 0 To 14
  290.             VT_True.Add(i.ToString)
  291.         Next
  292.         For i As Byte = 0 To 14
  293.             For j As Byte = 0 To ViTri_False.Count - 1
  294.                 If i.ToString = ViTri_False(j).ToString.Trim Then
  295.                     VT_True.Remove(ViTri_False(j).ToString.Trim)
  296.                 End If
  297.             Next
  298.         Next
  299.         Return VT_True
  300.     End Function
  301. #End Region
  302. End Class


Kết quả:

Test 1: OK
Test 2: Sai dự đoán gần (##:##)
Test 3: OK
Test 4: Sai cả hai (trả về cả hai đều là ##:##)
Test 5: Sai cả hai (trả về cả hai đều là ##:##)

Điểm test: 2.5/5

Nhận xét:

Code của bạn khá lung tung và kém hiệu quả. Thậm chí có cả làm thủ công! Không hiểu sao bạn phải dùng XML để lưu trữ tập tin của mình, làm mọi việc khá phức tạp. Rất tiếc mình không thấy được ưu điểm nào trong code của bạn cả!

Điểm code: 1/5

Tổng cộng: 3.5/10

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 02/09/2010 2:28 pm

Bài của bạn NovaFooc:

Code:

Class LCDpanel

  1. Public Class LCDpanel
  2.     Inherits UserControl
  3.     Const NumChk = 15
  4.     Const ChkSz = 15
  5.     Dim cb(NumChk - 1) As CheckBox
  6.  
  7.     Public Sub New()
  8.         Me.Size = New Size(ChkSz * 3, ChkSz * 5)
  9.         For i As Integer = 0 To NumChk - 1
  10.             cb(i) = New CheckBox
  11.             cb(i).AutoSize = True
  12.             cb(i).Location = New Point((i Mod 3) * ChkSz, (i \ 3) * ChkSz)
  13.         Next
  14.         Me.Controls.AddRange(cb)
  15.     End Sub
  16.  
  17.     Public Sub FromString(ByVal s As String)
  18.         For i As Integer = 0 To NumChk - 1
  19.             cb(i).Checked = CBool(Val(s(i)))
  20.         Next
  21.     End Sub
  22.  
  23.     Public Overrides Function ToString() As String
  24.         Dim s As New System.Text.StringBuilder
  25.         For i As Integer = 0 To NumChk - 1
  26.             s.Append(CInt(cb(i).Checked) * -1)
  27.         Next
  28.         Return s.ToString
  29.     End Function
  30.  
  31.     Public Function SoSanhThieu(ByVal s As String) As Integer
  32.         Dim lcdS As String = Me.ToString
  33.         Dim khac As Integer
  34.  
  35.         For i As Integer = 0 To NumChk - 1
  36.             Select Case s(i)
  37.                 Case "0"
  38.                     If lcdS(i) = "1" Then Return -1
  39.                 Case "1"
  40.                     If lcdS(i) = "0" Then khac += 1
  41.             End Select
  42.         Next
  43.         Return khac
  44.     End Function
  45.  
  46.     Public Function SoSanhGan(ByVal s As String) As Integer
  47.         Dim lcdS As String = Me.ToString
  48.         Dim khac As Integer
  49.  
  50.         For i As Integer = 0 To NumChk - 1
  51.             If lcdS(i) <> s(i) Then khac += 1
  52.         Next
  53.         Return khac
  54.     End Function
  55. End Class
  56.  


Form chính

  1. Imports System.IO
  2.  
  3. Public Class Form1
  4.     Dim lcd(3) As LCDpanel
  5.     Dim mau(9) As String
  6.     Dim gfx As Graphics = Me.CreateGraphics, pt(1) As Point
  7.  
  8.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9.         For i As Integer = 0 To 3
  10.             lcd(i) = New LCDpanel
  11.             lcd(i).Location = New Point(Label1.Left + 20 + i * 80, Label1.Bottom + 20)
  12.             Me.Controls.Add(lcd(i))
  13.         Next
  14.         pt(0) = New Point(lcd(1).Right + 10, lcd(1).Top + 20)
  15.         pt(1) = New Point(lcd(1).Right + 10, lcd(1).Top + 40)
  16.  
  17.         mau(0) = "111101101101111"
  18.         mau(1) = "001001001001001"
  19.         mau(2) = "111001111100111"
  20.         mau(3) = "111001111001111"
  21.         mau(4) = "101101111001001"
  22.         mau(5) = "111100111001111"
  23.         mau(6) = "111100111101111"
  24.         mau(7) = "111001001001001"
  25.         mau(8) = "111101111101111"
  26.         mau(9) = "111101111001111"
  27.     End Sub
  28.  
  29.     Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
  30.         RadioButtonRenderer.DrawRadioButton(gfx, pt(0), VisualStyles.RadioButtonState.CheckedHot)
  31.         RadioButtonRenderer.DrawRadioButton(gfx, pt(1), VisualStyles.RadioButtonState.CheckedHot)
  32.     End Sub
  33.  
  34.     Private Sub btnNhap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNhap.Click
  35.         If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
  36.             Try
  37.                 Dim path As String = OFD.FileName
  38.                 Dim sr As New StreamReader(path)
  39.                 For i As Integer = 0 To 3
  40.                     lcd(i).FromString(sr.ReadLine())
  41.                 Next
  42.                 sr.Close()
  43.                 MsgBox("Đã nhập xong")
  44.             Catch ex As Exception
  45.                 MsgBox(ex.Message)
  46.             End Try
  47.         End If
  48.     End Sub
  49.  
  50.     Private Sub btnXuat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXuat.Click
  51.         If SFD.ShowDialog = Windows.Forms.DialogResult.OK Then
  52.             Try
  53.                 Dim path As String = SFD.FileName
  54.                 Dim sw As New StreamWriter(path)
  55.                 For i As Integer = 0 To 3
  56.                     sw.WriteLine(lcd(i).ToString)
  57.                 Next
  58.                 sw.Close()
  59.                 MsgBox("Đã xuất xong")
  60.             Catch ex As Exception
  61.                 MsgBox(ex.Message)
  62.             End Try
  63.         End If
  64.     End Sub
  65.  
  66.     Private Sub btnThieu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThieu.Click
  67.         txtThieu.Text = SoSanh(True)
  68.     End Sub
  69.  
  70.     Private Sub btnGan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGan.Click
  71.         txtGan.Text = SoSanh(False)
  72.     End Sub
  73.  
  74.     Private Function SoSanh(ByVal thieu As Boolean) As String
  75.         Dim dudoan, sai, saimin, trung, chinhxac As Integer
  76.         Dim out As String = String.Empty
  77.  
  78.         For i As Integer = 0 To 3
  79.             dudoan = -1
  80.             saimin = 15
  81.             trung = 0
  82.             If lcd(i).ToString <> "000000000000000" Then
  83.                 For j As Integer = 0 To 9
  84.                     If thieu Then
  85.                         sai = lcd(i).SoSanhThieu(mau(j))
  86.                     Else
  87.                         sai = lcd(i).SoSanhGan(mau(j))
  88.                     End If
  89.  
  90.                     If sai > -1 Then
  91.                         If sai = 0 Then
  92.                             dudoan = j
  93.                             trung = 0
  94.                             chinhxac += 1
  95.                             Exit For
  96.                         ElseIf sai = saimin Then
  97.                             trung += 1
  98.                         ElseIf sai < saimin Then
  99.                             dudoan = j
  100.                             trung = 0
  101.                             saimin = sai
  102.                         End If
  103.                     End If
  104.                 Next
  105.             End If
  106.             If trung > 0 Then dudoan = -1
  107.             If dudoan = -1 Then
  108.                 out &= "#"
  109.             Else
  110.                 out &= dudoan.ToString
  111.             End If
  112.         Next
  113.  
  114.         out = out.Insert(2, ":")
  115.         If chinhxac = 4 Then out &= " (chính xác)"
  116.         Return out
  117.     End Function
  118. End Class
  119.  


Kết quả:

Test 1: OK
Test 2: Sai cả 2 dự đoán (trả về cả hai là 83:34)
Test 3: OK (tạm chấp nhận dù cả 2 trả về #4:34)
Test 4: Sai dự đoán thiếu (trả về 41:44)
Test 5: Sai cả hai (trả về cả hai đều là ##:78)

Điểm test: 2.5/5

Nhận xét:

Cách lưu trữ dữ liệu của bạn khá tốt, nhưng bạn lại xử lí khá khó khăn và kém chính xác. Bạn nên chú ý hơn đến đề bài vì bạn không xử lí "bẫy đồng hồ".

Điểm code: 3/5

Tổng cộng: 5.5/10

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 02/09/2010 2:28 pm

Bài của anh QuanGL:

Code:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using System.IO;
  10.  
  11. namespace KNLT2
  12. {
  13.     public partial class frmMain : Form
  14.     {
  15.         ChkBoxArr[] ch = new ChkBoxArr[4];
  16.  
  17.         //Bộ mã số từ 0-9
  18.         string[] So = new string[] { "111101101101111", "001001001001001", "111001111100111", "111001111001111", "101101111001001", "111100111001111", "111100111101111", "111001001001001", "111101111101111", "111101111001111" };
  19.         //
  20.  
  21.         public frmMain()
  22.         {
  23.             InitializeComponent();
  24.         }
  25.  
  26.         private int KTraCX(ChkBoxArr cba) //Kiểm tra chính xác ^^!
  27.         {
  28.             int i;
  29.             string s = cba.GetValueString();
  30.             for (i = 0; i < 10; i++)
  31.             {
  32.                 if (s == So[i])
  33.                     break;
  34.             }
  35.             return i;
  36.         }
  37.  
  38.         private void KTraThieu()
  39.         {
  40.             bool dunghet = true;
  41.             int[] num = new int[4];
  42.             int khac;
  43.             int found;
  44.             int nfound;
  45.  
  46.             for (int i = 0; i < 4; i++)
  47.             {
  48.                 num[i] = KTraCX(ch[i]);
  49.                 if (num[i] == 10)
  50.                 {
  51.                     dunghet = false;
  52.                     found = 0;
  53.                     nfound = -1;
  54.                     string sn = ch[i].GetValueString();
  55.  
  56.                     for (int j = 0; j < 10; j++)
  57.                     {
  58.                         khac = 0;
  59.                         string sc = So[j];
  60.                         for (int k = 0; k < 15; k++)
  61.                         {
  62.                             if (sc[k] == '0' && sn[k] == '1')
  63.                             {
  64.                                 khac = 0;
  65.                                 break;
  66.                             }
  67.                             if (sc[k] == '1' && sn[k] == '0')
  68.                                 khac++;
  69.                         }
  70.                         if (khac == 1)
  71.                         {
  72.                             nfound = j;
  73.                             found++;
  74.                         }
  75.                     }
  76.  
  77.                     if (found == 1 && nfound != -1)
  78.                         num[i] = nfound;
  79.                     else
  80.                         goto ERR;
  81.                 }
  82.             }
  83.             int hh = num[0] * 10 + num[1];
  84.             int mm = num[2] * 10 + num[3];
  85.             if (hh > 23 || mm > 59)
  86.             {
  87.                 MessageBox.Show("Không có giờ này: " + hh.ToString() + ":" + mm.ToString());
  88.                 return;
  89.             }
  90.             txtThieu.Text = num[0].ToString() + num[1].ToString() + ":" + num[2].ToString() + num[3].ToString();
  91.             if (dunghet)
  92.                 txtThieu.Text += " (chính xác)";
  93.             return;
  94.  
  95.         ERR:
  96.             txtThieu.Text = "##:##";
  97.         }
  98.  
  99.         private void KTraGan()
  100.         {
  101.             bool dunghet = true;
  102.             int[] num = new int[4];
  103.             int khac;
  104.             int[] f = new int[10];
  105.             int min, pos = 0;          
  106.            
  107.  
  108.             for (int i = 0; i < 4; i++)
  109.             {
  110.                 if (ch[i].GetValueString() == "000000000000000")
  111.                     goto ERR;
  112.                 num[i] = KTraCX(ch[i]);
  113.                 if (num[i] == 10)
  114.                 {
  115.                     dunghet = false;
  116.  
  117.                     string sn = ch[i].GetValueString();
  118.  
  119.                     for (int j = 0; j < 10; j++)
  120.                     {
  121.                         khac = 0;
  122.                         string sc = So[j];
  123.  
  124.                         for (int k = 0; k < 15; k++)
  125.                             if (sc[k] != sn[k])
  126.                                 khac++;
  127.  
  128.                         f[j] = khac;
  129.                     }
  130.  
  131.                     min = f[0];
  132.                     int c = 0;
  133.                     for (int ii = 1; ii < 10; ii++)
  134.                     {
  135.                         if (f[ii] == min)
  136.                             c++;
  137.                         if (f[ii] < min)
  138.                         {
  139.                             min = f[ii];
  140.                             pos = ii;
  141.                             c = 0;
  142.                         }
  143.                     }
  144.                     if (c == 0)
  145.                         num[i] = pos;
  146.                     else
  147.                         goto ERR;
  148.                 }
  149.             }
  150.  
  151.             int hh = num[0] * 10 + num[1];
  152.             int mm = num[2] * 10 + num[3];
  153.             if (hh > 23 || mm > 59)
  154.             {
  155.                 MessageBox.Show("Không có giờ này: " + hh.ToString() + ":" + mm.ToString());
  156.                 return;
  157.             }
  158.             txtGan.Text = num[0].ToString() + num[1].ToString() + ":" + num[2].ToString() + num[3].ToString();
  159.             if (dunghet)
  160.                 txtGan.Text += " (chính xác)";
  161.             return;
  162.  
  163.         ERR:
  164.             txtGan.Text = "##:##";
  165.         }
  166.  
  167.         private void frmMain_Load(object sender, EventArgs e)
  168.         {
  169.             RadioButton rb1 = new RadioButton();
  170.             RadioButton rb2 = new RadioButton();
  171.  
  172.             ch[0] = new ChkBoxArr(this, 15, 40);
  173.  
  174.             ch[1] = new ChkBoxArr(this, ch[0].Width + 15, 40);
  175.  
  176.             rb1.Size = new Size(14, 13);
  177.             rb1.Location = new Point(ch[1].Width + 1, ch[1].Y1);
  178.             rb1.Checked = true;
  179.             this.Controls.Add(rb1);
  180.  
  181.             rb2.Size = new Size(14, 13);
  182.             rb2.Location = new Point(ch[1].Width + 1, ch[1].Y2);
  183.             rb2.Checked = true;
  184.             this.Controls.Add(rb2);
  185.  
  186.             ch[2] = new ChkBoxArr(this, ch[1].Width + 21, 40);
  187.  
  188.             ch[3] = new ChkBoxArr(this, ch[2].Width + 15, 40);
  189.         }
  190.  
  191.         private void btnNhap_Click(object sender, EventArgs e)
  192.         {
  193.             if (openFileDialog1.ShowDialog() == DialogResult.OK)
  194.             {
  195.                 StreamReader reader = new StreamReader(openFileDialog1.FileName);
  196.                 string line = string.Empty;
  197.                 try
  198.                 {
  199.                     line = reader.ReadLine();
  200.                     reader.Close();
  201.                     if (line != null)
  202.                     {
  203.                         string[] values = line.Split(';');
  204.                         if (values.Length != 4)
  205.                         {
  206.                             MessageBox.Show("File không đúng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  207.                             return;
  208.                         }
  209.                         for (int i = 0; i < 4; i++)
  210.                             ch[i].SetValueFromString(values[i]);
  211.                     }
  212.                     else
  213.                         MessageBox.Show("File không đúng!", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
  214.                 }
  215.                 catch (Exception ex)
  216.                 {
  217.                     MessageBox.Show("Không thể mở file!\n" + ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
  218.                 }
  219.             }
  220.         }
  221.  
  222.         private void btnXuat_Click(object sender, EventArgs e)
  223.         {
  224.             SaveFileDialog saveFileDialog1 = new SaveFileDialog();
  225.             saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
  226.             saveFileDialog1.FilterIndex = 2;
  227.             saveFileDialog1.RestoreDirectory = true;
  228.             string rs = ch[0].GetValueString() + ";" + ch[1].GetValueString() + ";" + ch[2].GetValueString() + ";" + ch[3].GetValueString();
  229.             if (saveFileDialog1.ShowDialog() == DialogResult.OK)
  230.             {
  231.                 try
  232.                 {
  233.                     StreamWriter wText = new StreamWriter(saveFileDialog1.FileName);
  234.                     wText.WriteLine(rs);
  235.                     wText.Close();
  236.                 }
  237.                 catch (Exception ex)
  238.                 {
  239.                     MessageBox.Show("Không thể lưu file!\n" + ex.Message, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
  240.                 }
  241.             }
  242.         }
  243.  
  244.         private void btnThieu_Click(object sender, EventArgs e)
  245.         {
  246.             KTraThieu();
  247.         }
  248.  
  249.         private void btnGan_Click(object sender, EventArgs e)
  250.         {
  251.             KTraGan();
  252.         }
  253.     }
  254. }
  255.  


Kết quả:

Test 1: OK
Test 2: Đưa kết quả: không có giờ này (0.5đ)
Test 3: OK
Test 4: Sai dự đoán thiếu (trả về ##:##)
Test 5: Sai cả hai (trả về cả hai đều là ##:##)

Điểm test: 3/5

Nhận xét:
Bài gửi của anh QuanGL là sớm nhất, và rất vui vì anh đã bỏ chút thời gian dự thi. Nhìn chung thuật toán của anh gần giống với đáp án, còn về cấu trúc thì khá rõ ràng, và em không rành C# lắm nên không dám có nhận xét cao hơn. Rất tiếc anh xử lí giờ đồng hồ bằng cách thông báo giờ sai chứ không đưa ra kết quả gần nhất theo yêu cầu đề.

Điểm code: 4/5

Tổng cộng: 7/10

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 02/09/2010 2:28 pm

Bài của bạn T7:

Code:

  1. Public Class Form1
  2.  
  3.     Const cX = 20
  4.     Const cY = 30
  5.     Const rX = 133
  6.     Const rY = 45
  7.     Const str_so As String = "111101101101111001001001001001111001111100111111001111001111101101111001001111100111001111111100111101111111001001001001111101111101111111101111001111"
  8.     Dim c(4, 5, 3) As CheckBox
  9.     Dim so() As Byte = {2, 9, 6, 9}
  10.  
  11.     Private Function a(ByVal n As Byte, ByVal i As Byte, ByVal j As Byte) As Boolean
  12.         Return str_so.Substring(15 * n + 3 * (i - 1) + j - 1, 1) = "1"
  13.     End Function
  14.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  15.         Dim i, j, z As Byte
  16.         For i = 1 To 2
  17.             Dim r = New RadioButton
  18.             r.Location = New Point(rX, rY + 30 * (i - 1))
  19.             r.Size = New Size(13, 13)
  20.             r.Checked = True
  21.             Me.Controls.Add(r)
  22.         Next
  23.         For z = 1 To 4
  24.             For i = 1 To 5
  25.                 For j = 1 To 3
  26.                     c(z, i, j) = New CheckBox
  27.                     c(z, i, j).Location = New Point(cX + 16 * (j - 1) + 65 * (z - 1), cY + 15 * (i - 1))
  28.                     c(z, i, j).Size = New Size(13, 13)
  29.                     Me.Controls.Add(c(z, i, j))
  30.                 Next
  31.             Next
  32.         Next
  33.  
  34.     End Sub
  35.  
  36.     Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
  37.         If Me.SaveFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
  38.             Try
  39.                 Dim f As New IO.StreamWriter(Me.SaveFileDialog1.FileName)
  40.                 Dim i, j, z As Byte
  41.                 For z = 1 To 4
  42.                     For i = 1 To 5
  43.                         For j = 1 To 3
  44.                             f.Write(Math.Abs(Int(c(z, i, j).Checked)))
  45.                         Next
  46.                         f.WriteLine()
  47.                     Next
  48.                 Next
  49.                 f.Close()
  50.             Catch ex As Exception
  51.                 MsgBox("Err: " & ex.Message, MsgBoxStyle.Critical, "Error !")
  52.             End Try
  53.         End If
  54.     End Sub
  55.  
  56.     Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  57.         If Me.OpenFileDialog1.ShowDialog = Windows.Forms.DialogResult.OK Then
  58.             Try
  59.                 Dim f As New IO.StreamReader(Me.OpenFileDialog1.FileName)
  60.                 Dim i, j, z As Byte, s As String
  61.                 For z = 1 To 4
  62.                     For i = 1 To 5
  63.                         s = f.ReadLine()
  64.                         For j = 1 To 3
  65.                             c(z, i, j).Checked = s.Substring(j - 1, 1) = "1"
  66.                         Next
  67.                     Next
  68.                 Next
  69.             Catch ex As Exception
  70.                 MsgBox("Err: " & ex.Message, MsgBoxStyle.Critical, "Error !")
  71.             End Try
  72.         End If
  73.     End Sub
  74.  
  75.     Private Function Dudoan(Optional ByVal gan As Boolean = False) As String
  76.         Dim d(9) As Byte, n, i, j, z, h, min As Byte, s As String
  77.         Dim Exactly As Boolean = True
  78.         s = ""
  79.         For z = 1 To 4
  80.             h = so(z - 1)
  81.             If z = 2 And s = "2" Then h = 4
  82.             For n = 0 To h
  83.                 d(n) = 0
  84.                 For i = 1 To 5
  85.                     For j = 1 To 3
  86.                         If c(z, i, j).Checked Xor a(n, i, j) Then
  87.                             If c(z, i, j).Checked And Not (gan) Then d(n) = 100 Else d(n) += 1
  88.                         End If
  89.                     Next
  90.                 Next
  91.             Next
  92.  
  93.             i = 0
  94.             j = 0
  95.             min = d(0)
  96.             For n = 1 To h
  97.                 If d(n) < min Then
  98.                     i = n
  99.                     min = d(n)
  100.                     j = 0
  101.                 ElseIf d(n) = min Then
  102.                     j += 1
  103.                 End If
  104.             Next
  105.  
  106.             If j > 1 Or min >= 100 Then GoTo Khong_du_doan_duoc
  107.             If min <> 0 Then Exactly = False
  108.  
  109.             s &= Trim(Str(i))
  110.             If z = 2 Then s &= ":"
  111.         Next
  112.         If Exactly Then s &= " (chính xác)"
  113.         Return s
  114.         Exit Function
  115. Khong_du_doan_duoc:
  116.         Return "##:##"
  117.     End Function
  118.  
  119.     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  120.         TextBox1.Text = Dudoan()
  121.     End Sub
  122.  
  123.     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  124.         TextBox2.Text = Dudoan(True)
  125.     End Sub
  126. End Class
  127.  


Kết quả:

Test 1: OK
Test 2: OK
Test 3: Sai cả hai (trả về 24:34 và 14:34)
Test 4: OK
Test 5: OK

Điểm test: 4/5

Nhận xét:
Mình khá bất ngờ với code của bạn vì bạn gộp luôn cả 10 chữ số vào 1 chuỗi chứ không tách ra. Ngoài ra, cách xử lí vô cùng thông minh và ngắn gọn. Một ưu điểm nữa là bạn xét rất hay các trường hợp, nhưng không hiểu sao bạn để "lọt" trường hợp 24h ở test thứ 3.

Điểm code: 5/5

Tổng cộng: 9/10

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 02/09/2010 2:30 pm

Đáp án được post từ sáng rồi, nhưng mình chưa chấm bài nên chưa thông báo thôi.

Đã cập nhật điểm của mỗi bạn. Chúc mừng T7 đã đoạt giải nhất kì này. T7 vui lòng gửi địa chỉ vào email của bạn minhduc4477 để nhận quà nhé :D

Mời các bạn bàn luận đáp án vài ngày trước ra kì tiếp theo. Hi vọng các bạn sẽ ủng hộ nhiều hơn ;)

Hình đại diện của người dùng
lungocqua
Guru
Guru
Bài viết: 1225
Ngày tham gia: T.Ba 18/08/2009 11:51 am
Đến từ: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 time
Liên hệ:

Re: [Cuộc thi] Kỹ năng lập trình - Kì 2

Gửi bàigửi bởi lungocqua » T.Năm 02/09/2010 2:33 pm

[-( Hết ham luôn!
Ta đã trở lại và quên hết tất cả! :D


Quay về “Đề tài chung”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách