Từ 1 tới 9 trên tổng số 9 kết quả

Đề tài: Tìm vị trí kí tự trong chuỗi và thảo điều kiện không có 3 phần tử lẻ liên tiếp.

  1. #1
    Ngày gia nhập
    10 2010
    Bài viết
    2

    Post Tìm vị trí kí tự trong chuỗi và thảo điều kiện không có 3 phần tử lẻ liên tiếp.

    Em mới học C các pro chỉ giúp em cách làm 2 bài này nha:

    Câu 1:
    Cho đoạn văn bản và xâu ký tự P (đoạn văn bản và chuỗi ký tự P được nhập vào từ bàn phím).
    Yêu cầu: Tìm tất cả các vị trí mà P xuất hiện trong đoạn văn bản.

    Câu 2:
    Cho một mảng số nguyên gồm N phần tử có giá trị ngẫu nhiên
    Yêu cầu: Viết chương trình kiểm tra mảng thỏa mãn điều kiện: không có 3 phần tử lẻ liên tiếp.

    Các pro có thể cho em xin code để em tham khảo lun nha. Thanks các pro nhìu nhìu.

  2. #2
    Ngày gia nhập
    09 2010
    Nơi ở
    Hà Nôi
    Bài viết
    435

    BÀi 1:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. void main()
    5. {
    6.   char s1[200],s2[200],s[200];
    7.   int  i, j;
    8.   printf("Nhap doan van ban :");
    9.   gets(s1);
    10.   printf("Nhap xau ki tu can tim :");
    11.   fflush(stdin);
    12.   gets(s2);
    13.   printf("\nCac vi tri xau \"%s\" xuat hien trong xau \"%s\" la:  ",s2,s1);
    14.   for (i=0;i<=strlen(s1)-strlen(s2);i++)
    15.   {
    16.      for (j=i;j<strlen(s2)+i;j++) s[j-i]=s1[j];
    17.      if (strcmp(s2,s)==0) printf("%d ",i);;
    18.   }
    19.  
    20.   getch();
    21. }

  3. #3
    Ngày gia nhập
    03 2010
    Nơi ở
    My Home
    Bài viết
    768

    Bài 2:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4.  
    5. int CHECK(int* m, int l)
    6. {
    7.     int checked = 0, a;
    8.     for(int i = 0; i < l - 2; i++)
    9.     {
    10.         a = *(m + i);
    11.         if((a << (sizeof(int) * 8 - 1)) >> (sizeof(int) * 8 - 1))
    12.         {
    13.             if(*(m + i) == *(m + i + 1) - 2 && *(m + i) == *(m + i + 2) - 4)
    14.             {
    15.                 checked = 1;
    16.                 break;
    17.             }
    18.         }
    19.     }
    20.     return checked;
    21. }
    22.  
    23.  
    24. int main()
    25. {
    26.     int *a, *p;
    27.     int i, length;
    28.    
    29.     printf("do dai cua day = ");
    30.     scanf("%d", &length);
    31.     if(length > 2)
    32.     {
    33.         a = (int *)malloc(length * sizeof(int));
    34.         printf("day so ngau nhien:\n");
    35.         for(p = a; p < a + length; p++)
    36.         {
    37.             *p = rand() % 1000;
    38.             printf("%5d", *p);
    39.         }
    40.         printf("\ntrong day %s 3 phan tu le lien tiep\n", CHECK(a, length) ? "co" : "khong co");       
    41.         free(a);
    42.     }
    43.     else
    44.         printf("do dai cua day phai lon hon 3");
    45.     getch();
    46.     return 0;
    47. }

  4. #4
    Ngày gia nhập
    04 2010
    Bài viết
    1,537

    Code đại khái thôi, không có thì giờ thử.

    [1]
    C Code:
    1. /* sử dụng hàm strstr của C */
    2. int vt = 0;
    3. char* p = chuoiLon;
    4. while (*p) {
    5.     vt++;
    6.     if (strstr(p,chuoiNho)) printf("Tìm được ở vị trí : %d\n", vt);
    7.     p++;
    8. }

    [2]
    C Code:
    1. /* đã có mảng mang[] N phần tử */
    2. int i;
    3. for (i = 2; i < N; i++)
    4.     if (mang[i]%2 && mang[i-1]%2 && mang[i-2]%2) break;
    5. /* xét pt, pt trước, và trước đó. Nếu cả 3 cùng lẻ thì không đi tiếp nữa */
    6. /* xét i, nếu nhỏ hơn N là vòng lặp trên thoát sớm */
    7. printf("Mảng%s có 3 pt lẻ liên tiếp\n", (i<N)? "" : " không");

  5. #5
    Ngày gia nhập
    10 2010
    Bài viết
    2

    Thanks các pro rất nhiều, có dịp xin hậu tạ.

  6. #6
    Ngày gia nhập
    01 2011
    Bài viết
    4

    Mặc định Tìm vị trí kí tự trong chuỗi và thảo điều kiện không có 3 phần tử lẻ liên tiếp.

    các bác thật cẩn thận.cho luôn cả code.em cũng thanks cái.

  7. #7
    Ngày gia nhập
    09 2008
    Bài viết
    41

    Trích dẫn Nguyên bản được gửi bởi dehin Xem bài viết
    BÀi 1:
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <string.h>
    4. void main()
    5. {
    6.   char s1[200],s2[200],s[200];
    7.   int  i, j;
    8.   printf("Nhap doan van ban :");
    9.   gets(s1);
    10.   printf("Nhap xau ki tu can tim :");
    11.   fflush(stdin);
    12.   gets(s2);
    13.   printf("\nCac vi tri xau \"%s\" xuat hien trong xau \"%s\" la:  ",s2,s1);
    14.   for (i=0;i<=strlen(s1)-strlen(s2);i++)
    15.   {
    16.      for (j=i;j<strlen(s2)+i;j++) s[j-i]=s1[j];
    17.      if (strcmp(s2,s)==0) printf("%d ",i);;
    18.   }
    19.  
    20.   getch();
    21. }
    Em mới học C còn gà nên chưa hiểu thuật toán của bác trong đoạn code này.Mong bác giải thích cho em hiểu rõ hơn.Cảm ơn bác trước

  8. #8
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    826

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Code đại khái thôi, không có thì giờ thử.

    [1]
    C Code:
    1. /* sử dụng hàm strstr của C */
    2. int vt = 0;
    3. char* p = chuoiLon;
    4. while (*p) {
    5.     vt++;
    6.     if (strstr(p,chuoiNho)) printf("Tìm được ở vị trí : %d\n", vt);
    7.     p++;
    8. }

    [2]
    C Code:
    1. /* đã có mảng mang[] N phần tử */
    2. int i;
    3. for (i = 2; i < N; i++)
    4.     if (mang[i]%2 && mang[i-1]%2 && mang[i-2]%2) break;
    5. /* xét pt, pt trước, và trước đó. Nếu cả 3 cùng lẻ thì không đi tiếp nữa */
    6. /* xét i, nếu nhỏ hơn N là vòng lặp trên thoát sớm */
    7. printf("Mảng%s có 3 pt lẻ liên tiếp\n", (i<N)? "" : " không");
    Bài 2 anh yêu chơi macro kiểu đó sao mấy em nó hiểu.
    C++ Code:
    1. (i<N)? "có" : "không"  ->
    2. ->  if(i<N)
    3.          printf("có\n");
    4.       else
    5.          printf("không\n");

    Đúng bài thứ 500 đáng lẽ nên làm 1 bài hoành tráng ăn mừng chứ nhỉ. Làm 1 bài hoành tráng đi VoTichsu ơi

  9. #9
    Ngày gia nhập
    11 2010
    Nơi ở
    Black Hole
    Bài viết
    826

    Trích dẫn Nguyên bản được gửi bởi nguyenquanghung Xem bài viết
    Em mới học C còn gà nên chưa hiểu thuật toán của bác trong đoạn code này.Mong bác giải thích cho em hiểu rõ hơn.Cảm ơn bác trước
    Bạn ấy lấy ra tưng chuỗi s có độ dài bằng strlen(s2) trong s1 , rồi đem đi so sánh với s2. hơi phức tạp.

    dùng cái này nhanh hơn : (thuật toán là như nhau )

    C++ Code:
    1. for (i=0;i<=strlen(s1)-strlen(s2);i++)
    2.   {
    3.      if (strncmp(s1+i,s2,strlen(s2))==0) {
    4.        printf("có %s trong %s ỏ vị trí %d ",s2,s1,i);
    5.        break;
    6.    }
    7.   }

Các đề tài tương tự

  1. Tìm chuỗi pattern không liên tiếp có trong chuỗi str cho trước ?
    Gửi bởi kimchinh_no1 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 2
    Bài viết cuối: 23-07-2012, 01:58 PM
  2. Tìm chuỗi con gồm các số giống nhau liên tiếp dài nhất của một chuỗi cho trước
    Gửi bởi dailammoc trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 8
    Bài viết cuối: 07-02-2012, 09:03 PM
  3. Get link khi click chuột phải vào một liên kết trong WebBrowser
    Gửi bởi kendy92 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 28-04-2011, 10:54 PM
  4. Tạo 1 mảng có n phần tử là cac 1 số liên tiếp trong dãy Fibonaci.
    Gửi bởi quoccuong1991cltg trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 28-05-2010, 06:19 AM
  5. Có cách nào kiểm tra một chuỗi trong textbox có phải chuỗi tiếng Việt có dấu ko?
    Gửi bởi bachhaiduong trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 11
    Bài viết cuối: 26-04-2010, 07:52 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn