• 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

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.Năm 02/09/2010 3:16 pm

hehe, không xét giờ nên rớt thảm hại lun :D
code bác T7 ngắn gọn ghê =D>
còn code của lungocqua sao càng lúc càng đồ sộ thế @-)



Hình đại diện của người dùng
T7
Thành viên danh dự
Thành viên danh dự
Bài viết: 415
Ngày tham gia: T.Năm 24/05/2007 8:19 pm
Đến từ: Long Xuyên - An Giang
Been thanked: 12 time
Liên hệ:

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

Gửi bàigửi bởi T7 » T.Năm 02/09/2010 8:15 pm

Hix, quên để ý đến cái vụ quá 24h :"> . Em mới phát hiện ra trong đoạn code xét "nếu nhiều trường hợp có khả năng bằng nhau thì coi như ko đoán được" của em bị sai (thay vì code chỉ cần 2 trường hợp có khả năng bằng nhau thì coi như ko đoán được, code của em viết phải có ít nhất 3 trường hợp có khả năng bằng nhau nó mới ko đoán được :P ). May mà 5 cái test của anh Đạt chỉ có cái test thứ 3 là trường hợp có 2 trường hợp có khả năng bằng nhau ở số đầu - giờ hàng chục thôi :D
Em cũng xin gửi lại code của em sau khi đã sửa để chạy đúng cả 5 test cho mọi người tham khảo (sửa tí thôi ;) )
  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.             If z > 2 And s = "24:" Then h = 0 'Thêm dòng này để cho trường hợp 24h đúng
  83.             For n = 0 To h
  84.                 d(n) = 0
  85.                 For i = 1 To 5
  86.                     For j = 1 To 3
  87.                         If c(z, i, j).Checked Xor a(n, i, j) Then
  88.                             If c(z, i, j).Checked And Not (gan) Then d(n) = 100 Else d(n) += 1
  89.                         End If
  90.                     Next
  91.                 Next
  92.             Next
  93.  
  94.             i = 0
  95.             j = 0
  96.             min = d(0)
  97.             For n = 1 To h
  98.                 If d(n) < min Then
  99.                     i = n
  100.                     min = d(n)
  101.                     j = 0
  102.                 ElseIf d(n) = min Then
  103.                     j += 1
  104.                 End If
  105.             Next
  106.  
  107.             If j <> 0 Or min >= 100 Then GoTo Khong_du_doan_duoc ' Sửa j>1 lại thành j<>0
  108.             If min <> 0 Then Exactly = False
  109.  
  110.             s &= Trim(Str(i))
  111.             If z = 2 Then s &= ":"
  112.         Next
  113.         If Exactly Then s &= " (chính xác)"
  114.         Return s
  115.         Exit Function
  116. Khong_du_doan_duoc:
  117.         Return "##:##"
  118.     End Function
  119.  
  120.     Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
  121.         TextBox1.Text = Dudoan()
  122.     End Sub
  123.  
  124.     Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
  125.         TextBox2.Text = Dudoan(True)
  126.     End Sub
  127. End Class
While (i <= you) i++;

Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

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

Gửi bàigửi bởi alexanderdna » T.Năm 02/09/2010 8:57 pm

Xin cho tôi có ý kiến! :D

Sau khi nhìn vào mã lệnh rất lâu, nghiền ngẫm rất kỹ, tôi phát giác ra là đầu mình "té khói".

Khi đăng xong mã nguồn của tất cả bài dự thi, nếu có thể đăng luôn phần giải thích thuật toán thì sẽ tiện hơn nếu có ai muốn nghiên cứu mã lệnh.

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 9:02 pm

Hì, mình đã có ghi chú khá cẩn thận code so với 2 kì trước rồi. Vậy bạn alexanderdna không hiểu chỗ nào mình xin được giải thích :D

Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

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

Gửi bàigửi bởi alexanderdna » T.Năm 02/09/2010 9:12 pm

Thành thật xin lỗi. Tôi đã khinh suất quá mạng! Té ra là mã nguồn của câu trả lời, cũng như phương pháp giải, đã đăng ở bài đầu tiên.
Xin rút lại ý kiến ở bài trên. :P


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.2 khách