• 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

Moderator: Điều hành

User avatar
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
Posts: 94
Joined: Fri 11/12/2009 2:15 pm
Been thanked: 1 time

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

Postby minhduc4477 » Mon 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.

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

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

Postby lungocqua » Mon 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

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

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

Postby VuVanHoanh » Mon 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 wrote: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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Tue 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
Posts: 307
Joined: Tue 11/08/2009 3:27 pm

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

Postby NovaFooc » Tue 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

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

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

Postby lungocqua » Wed 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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Wed 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

User avatar
VuVanHoanh
Thành viên danh dự
Thành viên danh dự
Posts: 1259
Joined: Thu 03/06/2010 9:23 pm
Location: Kim Sơn - Đông Triều - Quảng Ninh
Has thanked: 22 times
Been thanked: 138 times
Contact:

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

Postby VuVanHoanh » Wed 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

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

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

Postby lungocqua » Wed 25/08/2010 7:08 pm

vo_minhdat2007 wrote: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

User avatar
minhduc4477
Thành viên năng nổ
Thành viên năng nổ
Posts: 94
Joined: Fri 11/12/2009 2:15 pm
Been thanked: 1 time

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

Postby minhduc4477 » Sun 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
Posts: 307
Joined: Tue 11/08/2009 3:27 pm

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

Postby NovaFooc » Sun 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 :-/

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Mon 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 ;)

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

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

Postby lungocqua » Mon 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

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

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

Postby lungocqua » Thu 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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Thu 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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Thu 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

[vbnet]Imports System.IO

Public Class Form1
Dim lcd(3) As LCDpanel
Dim mau(9) As String
Dim gfx As Graphics = Me.CreateGraphics, pt(1) As Point

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
For i As Integer = 0 To 3
lcd(i) = New LCDpanel
lcd(i).Location = New Point(Label1.Left + 20 + i * 80, Label1.Bottom + 20)
Me.Controls.Add(lcd(i))
Next
pt(0) = New Point(lcd(1).Right + 10, lcd(1).Top + 20)
pt(1) = New Point(lcd(1).Right + 10, lcd(1).Top + 40)

mau(0) = "111101101101111"
mau(1) = "001001001001001"
mau(2) = "111001111100111"
mau(3) = "111001111001111"
mau(4) = "101101111001001"
mau(5) = "111100111001111"
mau(6) = "111100111101111"
mau(7) = "111001001001001"
mau(8) = "111101111101111"
mau(9) = "111101111001111"
End Sub

Private Sub Form1_Paint(ByVal sender As Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles Me.Paint
RadioButtonRenderer.DrawRadioButton(gfx, pt(0), VisualStyles.RadioButtonState.CheckedHot)
RadioButtonRenderer.DrawRadioButton(gfx, pt(1), VisualStyles.RadioButtonState.CheckedHot)
End Sub

Private Sub btnNhap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNhap.Click
If OFD.ShowDialog = Windows.Forms.DialogResult.OK Then
Try
Dim path As String = OFD.FileName
Dim sr As New StreamReader(path)
For i As Integer = 0 To 3
lcd(i).FromString(sr.ReadLine())
Next
sr.Close()
MsgBox("Đã nhập xong")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub

Private Sub btnXuat_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnXuat.Click
If SFD.ShowDialog = Windows.Forms.DialogResult.OK Then
Try
Dim path As String = SFD.FileName
Dim sw As New StreamWriter(path)
For i As Integer = 0 To 3
sw.WriteLine(lcd(i).ToString)
Next
sw.Close()
MsgBox("Đã xuất xong")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End If
End Sub

Private Sub btnThieu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThieu.Click
txtThieu.Text = SoSanh(True)
End Sub

Private Sub btnGan_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGan.Click
txtGan.Text = SoSanh(False)
End Sub

Private Function SoSanh(ByVal thieu As Boolean) As String
Dim dudoan, sai, saimin, trung, chinhxac As Integer
Dim out As String = String.Empty

For i As Integer = 0 To 3
dudoan = -1
saimin = 15
trung = 0
If lcd(i).ToString <> "000000000000000" Then
For j As Integer = 0 To 9
If thieu Then
sai = lcd(i).SoSanhThieu(mau(j))
Else
sai = lcd(i).SoSanhGan(mau(j))
End If

If sai > -1 Then
If sai = 0 Then
dudoan = j
trung = 0
chinhxac += 1
Exit For
ElseIf sai = saimin Then
trung += 1
ElseIf sai < saimin Then
dudoan = j
trung = 0
saimin = sai
End If
End If
Next
End If
If trung > 0 Then dudoan = -1
If dudoan = -1 Then
out &= "#"
Else
out &= dudoan.ToString
End If
Next

out = out.Insert(2, ":")
If chinhxac = 4 Then out &= " (chính xác)"
Return out
End Function
End Class
[/vbnet]

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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Thu 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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Thu 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

User avatar
vo_minhdat2007
Quản trị
Quản trị
Posts: 2227
Joined: Sun 17/07/2005 1:40 am
Has thanked: 13 times
Been thanked: 87 times
Contact:

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

Postby vo_minhdat2007 » Thu 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 ;)

User avatar
lungocqua
Guru
Guru
Posts: 1225
Joined: Tue 18/08/2009 11:51 am
Location: Phú Hữu - Nhơn Trạch - Đồng Nai
Been thanked: 5 times
Contact:

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

Postby lungocqua » Thu 02/09/2010 2:33 pm

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


Return to “Đề tài chung”

Who is online

Users browsing this forum: No registered users and 1 guest