Announcement

Collapse
No announcement yet.

[Lập trình newbie] Mỗi ngày một bài toán (số 14)

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • [Lập trình newbie] Mỗi ngày một bài toán (số 14)

    Hi all, ,mấy ngày qua mình bận với mấy cái đồ án môn học hè quá nên không ra kịp bài số 14. Hôm nay trở lại chào đón sự thay đổi của HKT ta làm bài sau nhé .
    Bài toán:
    Vị Giám đốc công ty XYZ cần gửi một văn bản quan trọng tới một đối tác của mình. Văn bản là một xâu S các chữ cái la tinh in thường. Để bảo mật nội dung văn bản, ông Giám đốc gửi 2 bức thư. Bức thư thứ nhất là phần đầu Sb của xâu S, bức thư thứ 2 là phần cuối Se của S. Hai bức thư Sb và Se đảm bảo đầy đủ nội dung của S, tuy nhiên có thể một phần cuối của Sb có thể được viết lặp lại trong phần đầu của Se, song số kí tự được viết lặp lại không biết trước.
    Ví dụ: với văn bản S=’truongnguyenduquannhat’ tạo ra hai bức thư:
    Sb=truongngueNdu
    ngueNduquanNhat=Se=
    Sb=’truongnguyendu’ và Se=’nguyenduquannhat
    Yêu cầu: Cho hai xâu Sb và Se, hãy xác định một xâu S có thể là nội dung của bức thư sao cho độ dài của xâu S là ngắn nhất.
    Dữ liệu

    Dòng đầu chứa xâu Sb, dòng thứ hai chứa xâu Se. Mỗi xâu có độ dài không quá 250.
    Kết quả

    Ghi ra độ dài của xâu S tìm được.
    Ví dụ



    Dữ liệu
    truongnguyendu
    nguyenduquannhat
    Kết quả
    22
    Chúc vui vẻ, mình luyện công đây :brick:
    Last edited by 09520281; 07-08-2012, 00:23.
    Facebook: Kiều Thắng
    Google Plus: Kiều Thắng
    Thông tin về du học các nước: Du học.


  • #2
    Lâu rồi mình cũng ko code , chỉ nêu cách giải sơ sơ thôi ^^!

    Dùng 2 con trỏ *p , *q bám vào 2 đầu chuỗi sb và se. Dùng 1 biến length để lưu chiều dài kết quả ( length ban đầu = 0 ).
    Dùng vòng lặp cho *p đi dần về phía cuối chuỗi sb. Mỗi bước đi ta so sánh ký tự trong *p với ký tự đầu của chuỗi se.
    - Nếu không trùng , tăng length lên 1 , đi tiếp.
    -Nếu trùng , dùng vòng lặp lần lượt so sánh tương ứng ký tự tiếp theo xem nó có trùng với ký tự tiếp theo của chuỗi se không
    + nếu cứ trùng hòai cho đến cuối chuỗi sb thì kết quả sẽ là kq= length + lengthOfSe
    + nếu chưa đến cuối chuỗi se mà có ký tự ko trùng thì cho *q bám lại đầu chuỗi se , break vòng lặp.

    Comment


    • #3
      Dùng thuật toán của bạn kengo14

      PHP Code:

      #include <stdio.h>
      #include <string.h>
      int chuoicon(char Se[],char Sb[],int i)
      {
          
      int j=strlen(Sb)-1;
          for (;
      i>=0&&j>=0;i--,j--)
              if (
      Se[i]!=Sb[j])
                  return 
      0;
          return 
      1;
      }
      int xuly(char Sb[],char Se[])
      {
          
      int i,j=strlen(Sb)-1,p;
          for (
      i=0;i<strlen(Se);i++)
          {
              if (
      i==strlen(Sb)-1) return i;
              
      p=i;
          }
          return 
      p;
      }
      void main()
      {
          
      char Sb[250],Se[250];
          
      gets(Sb);
          
      gets(Se);
          
      int p=xuly(Sb,Se),i=0;
          while(
      i<strlen(Sb))
              
      printf("%c",Sb[i++]);
          while(
      p++<strlen(Se))
              
      printf("%c",Se[p]);


      Last edited by 11520132; 09-08-2012, 13:08.

      Comment


      • #4
        vậy là ko cần in cái tin nhắn đó ra fai ko?

        PHP Code:
        #include "stdafx.h"
        #include <conio.h>
        #include <stdio.h>
        #include <string.h>

        void main()
        {
            
        char sb[250],se[250];
            
        int i,j,kq;
            
        printf("nhap:\n");
            
        flushall();
            
        gets(sb);
            
        gets(se);
            
        int dem1=strlen(sb);
            
        int dem2=strlen(se);
            
        j=0;
            for(
        i=0;i<=dem1;i++)
            {
                if(
        i==dem1) break;
                if(
        sb[i]==se[j]) 
                {
                    
        j++;
                }
                else 
        j=0;
            }
            
        kq=dem1+dem2-j;
            
        printf("\n%d",kq);
            
        getch();

        Comment


        • #5
          Originally posted by 11520447 View Post
          vậy là ko cần in cái tin nhắn đó ra fai ko?
          Ọc, mình in bà cái chuỗi đó ra rồi, chậc kệ

          Comment

          LHQC

          Collapse
          Working...
          X