Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 18 kết quả

Đề tài: Kiểm tra dãy n các dấu ngoặc là đúng hay sai?

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

    Question Kiểm tra dãy n các dấu ngoặc là đúng hay sai?

    Em có bài này mà không biết làm như thế nào, mọi người giúp em với nhé!
    Đề bài: Nhập vào số nguyên n, sau đó nhập n dấu ngoặc với 1<n<=20
    Yêu cầu là kiểm tra dãy dấu ngoặc đó là đúng hay sai!
    Em chỉ có thể làm được kiểm tra dãy dấu ngoặc bất kì thôi, còn số nguyên n thì em chịu chết!
    thanks trc nhé

  2. #2
    Ngày gia nhập
    01 2011
    Nơi ở
    Hà Nội
    Bài viết
    188

    Mình chưa hiểu đề lắm. Bạn có thể cho ví dụ được không?

  3. #3
    Ngày gia nhập
    10 2011
    Bài viết
    3

    Vd: N=4 (()): đúng
    n=6 ()())): Sai

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

    giống bài tập automat hồi năm 2 làm.Dùng cây cú pháp để xử lý dấu ngoặc.
    Nghe Metal và dịch thơ
    lttqstudy.wordpress.com

  5. #5
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    bạn tìm dấu ngoặc đúng đầu tiên ( cặp đơn vị ). Xóa cặp đơn vị này. Lặp lại quá trình tới khi không thể xóa được nữa. Lúc này nếu số dấu ngoặc = 0 thì đúng, ngược lại là sai.
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

  6. #6
    Ngày gia nhập
    09 2010
    Nơi ở
    Linux-Ubuntu
    Bài viết
    217

    Mặc định Kiểm tra dãy n các dấu ngoặc là đúng hay sai?

    Năm 2 làm còn cái code này, tham khảo nhé, chạy trên linux
    C Code:
    1. /*Algorithm:
    2. 1:make an empty stack
    3. 2: while (end of input is not reach){
    4.   - if symbol read not a symbol to be balanced, ignore if
    5.   - If the character is an opening symbol , push it onto the stack
    6.   - If it is a clodeing symbol, the nif the stack is empty return 0, otherwise pop th srack
    7.   - if the symbol poped is not the corresponding opeing symbol, report an error
    8. In the end of output, return 1 if a->top = 0 else return 1
    9.  */
    10. #include <stdio.h>
    11. #include <string.h>
    12. #include <stdlib.h>
    13. #define MAX 20
    14.  
    15. struct stack{
    16.   char character[MAX];
    17.   int top;
    18. };
    19.  
    20. typedef struct stack stack;
    21.  
    22. void Init(stack *a){
    23.   a->top=0;
    24. }
    25.  
    26. void Push(stack *a,int value){
    27.   if(a->top>=MAX){
    28.     printf("canot push more element to stack.\n");
    29.     exit(1);
    30.   }
    31.   else{
    32.     a->top++;
    33.     a->character[a->top]=value;
    34.   }
    35. }
    36.  
    37. int Pop(stack *a){
    38.   if(a->top<=0){
    39.     printf("cannot pop more ..\n");
    40.     exit(1);
    41.   }
    42.   else{
    43.     int temp=a->character[a->top];
    44.     a->top--;
    45.     return temp;
    46.   }
    47. }
    48.  
    49. int check(stack *a,char *str){
    50.   int i;
    51.   int count=0;
    52.   for(i=0;i<strlen(str);i++){  //liner
    53.     if((str[i]=='(')||(str[i]=='{')||(str[i]=='['))
    54.       Push(a,str[i]);
    55.     else if(str[i]==')'){
    56.       if(a->top!=0){        
    57.     if(Pop(a)!='(')  //
    58.       return 0;
    59.       }
    60.       else
    61.     Push(a,str[i]);
    62.     }
    63.     else if(str[i]=='}'){
    64.       if(a->top!=0){
    65.     if(Pop(a)!='{')
    66.       return 0;
    67.       }
    68.       else
    69.     Push(a,str[i]);
    70.     }
    71.   else if(str[i]==']'){
    72.     if(a->top!=0){
    73.       if(Pop(a)!='[')
    74.     return 0;
    75.     }
    76.     else
    77.       Push(a,str[i]);
    78.   }
    79.   else if(str[i]=='"'){
    80.     count++;   //count the number of " character
    81.     if(count%2!=0){    //check odd or even
    82.       Push(a,str[i]);  // if odd
    83.     }
    84.     else{
    85.       if(Pop(a)!='"')
    86.     return 0;
    87.     }
    88.   }
    89.   }
    90.   if(a->top==0)
    91.     return 1;
    92.   else
    93.     return 0;
    94. }
    95.  
    96.  
    97. int main(){
    98.   stack a;
    99.   Init(&a);
    100.   char str1[20];
    101.   printf("input the expression operator:");
    102.   fgets(str1,20,stdin);
    103.   if(check(&a,str1))
    104.     printf("Well done.Correct parentness!\n");
    105.   else
    106.     printf("wrong, parentness!\n");
    107. }
    Đã được chỉnh sửa lần cuối bởi nmt1402 : 13-10-2011 lúc 11:50 PM.
    ++Sự Học Không Bao Giờ Là Muộn++
    ---Sướng Thì Ta Làm, Thích Thì Sẽ Được---
    ......Đôi khi bỏ học cũng là một bước đột phá...

    ***HỘI NHỮNG NGƯỜI PHÁT CUỒNG VÌ LINUX***

  7. #7
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    C++ Code:
    1. #include<cstdio>
    2. #include<iostream>
    3. #include<sstream>
    4. #include<algorithm>
    5. #include<cstring>
    6. #include<string>
    7. #include<cstdlib>
    8. #include<vector>
    9. #include<bitset>
    10. #include<stack>
    11. #include<queue>
    12. #include<deque>
    13. #include<cmath>
    14. #include<set>
    15. #include<map>
    16. using namespace std;
    17.  
    18. typedef long long ll;
    19. typedef unsigned long long ull;
    20. #define INF 2023456789
    21. #define FOR(i,a,b) for(int i = a; i < b; ++i)
    22. #define FORD(i,a,b) for(int i = a; i >= b; --i)
    23. #define REP(i,a,b) for(int i = a; i <= b; ++i)
    24. #define tr(container, it) \
    25.       for(typeof(container.begin()) it = container.begin(); it != container.end(); it++)
    26.  
    27. stack<char> st;
    28. char x;
    29. int n;
    30. int main() {
    31.     freopen("in.txt", "r", stdin);
    32.     //freopen("out.txt", "w", stdout);
    33.     scanf("%d",&n);
    34.     scanf("%c",&x);
    35.     FOR(i,0,n){
    36.         scanf("%c",&x);
    37.         if(x == '(') st.push(x);
    38.         else { // x = ')'
    39.             if(st.empty()){
    40.                 cout << "false";
    41.                 return 0;
    42.             }
    43.             else {
    44.                 st.pop();
    45.             }
    46.         }
    47.     }
    48.     if(st.empty())cout << "true";
    49.     else cout << "false";
    50. }
    input :
    Code:
    7
    ((()())
    output :
    Code:
    false
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

  8. #8
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Ối bài này đơn giản thôi. Mọi người làm phức tạp quá. tiendaotd thì cho nhiều thư viện làm mình hoa cả mắt ><. Cái gì ko cần đến thì cho vào làm gì hix
    Giống như chỉ ăn có 1 bát cơm nhưng lại cho cả một xe ô tô chở bát ra

    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. int kt (char arr[], int n)
    5. {
    6.     int count = 0;
    7.     if (arr[0]!= '(')
    8.         return 0;
    9.     for (int i = 0; i < n; i ++)
    10.     {
    11.  
    12.         if (arr[i] == '(')
    13.             count ++;
    14.         else
    15.             count --;
    16.         if (count < 0)
    17.             return 0;
    18.     }
    19.     if (count == 0)
    20.         return 1;
    21.     else
    22.         return 0;
    23. }
    24.  
    25. int main ()
    26. {
    27.     int n;
    28.     char arr [10];
    29.     cout << "Nhap n: ";
    30.     cin >> n;
    31.  
    32.     if (n%2 != 0)
    33.         cout << "Khong thoa man: " << endl;
    34.     else
    35.     {
    36.         cout << "Nhap (or): ";
    37.         cin.ignore (1);
    38.         cin.getline (arr, n);
    39.         if (kt (arr, n) != 0)
    40.             cout << "Thoa man" << endl;
    41.         else
    42.             cout << "Khong thoa man" << endl;
    43.     }
    44.     return 0;
    45. }

  9. #9
    Ngày gia nhập
    12 2009
    Nơi ở
    The country of happiness
    Bài viết
    182

    code thằng vào cái template nên nó vậy. Chắc bạn ít code trên online judge nên nhìn ko quen.

    @hung : ko biết file input của bạn định dạng thế nào. Nếu theo định dạng
    Code:
    6
    ((()))
    thì phải sửa đoạn
    C++ Code:
    1. cin.getline (arr, n);

    thành
    C++ Code:
    1. cin.getline (arr, n+1);

    mới in ra xâu đúng
    C++ Code:
    1.  cout << "xau : " << arr << endl;
    Đã được chỉnh sửa lần cuối bởi tiendaotd : 14-10-2011 lúc 05:21 PM.
    Trích dẫn Nguyên bản được gửi bởi Wazi Armstrong Xem bài viết
    Ôi skill của mình đã đạt đến hàng tuyệt đỉnh
    Không chỉ ăn, tắm, đi lại có thể code
    Mà giờ đã mình có thể code cả khi ngủ. Code tạm vào buffer của não, lúc nào dậy chỉ việc viết ra một cách trôi chảy không lưỡng lự.
    PS: Nếu ngủ dài rảnh rảnh có thể debug luôn, dậy chỉ việc build ?
    Trích dẫn Nguyên bản được gửi bởi vietanh8286 Xem bài viết
    Lập trình viên giỏi là lập trình viên có vợ

  10. #10
    Ngày gia nhập
    01 2011
    Nơi ở
    -Mountain-
    Bài viết
    768

    Trích dẫn Nguyên bản được gửi bởi tiendaotd Xem bài viết
    code thằng vào cái template nên nó vậy. Chắc bạn ít code trên online judge nên nhìn ko quen.

    @hung : ko biết file input của bạn định dạng thế nào. Nếu theo định dạng
    Code:
    6
    ((()))
    thì phải sửa đoạn
    C++ Code:
    1. cin.getline (arr, n);

    thành
    C++ Code:
    1. cin.getline (arr, n+1);

    mới in ra xâu đúng
    C++ Code:
    1.  cout << "xau : " << arr << endl;
    Mình chưa code onl lần nào chỉ code trên IDE. Dữ liệu của mình nhập từ bàn phím
    Đã test lại chưa thấy lỗi sai. Còn nếu sửa thành n+1 thì của mình mới có lỗi

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

  1. Bếp hồng ngoại Midea, bếp hồng ngoại Magic Bullet – Giải pháp tiết kiệm thời gian và năng lượng
    Gửi bởi docavn01 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 1
    Bài viết cuối: 20-10-2012, 11:38 AM
  2. >>>Bếp đôi hồng ngoại Sooxto Japan, bếp đôi hồng ngoại Chefs, Facare, bếp đôi hỗn hợp
    Gửi bởi docavn01 trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 3
    Bài viết cuối: 20-10-2012, 09:55 AM
  3. Liệt kê tất cả cách đặt n dấu ngoặc đóng và n dấu ngoạc mở đúng đắn
    Gửi bởi cotendn trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 3
    Bài viết cuối: 01-03-2012, 05:15 PM
  4. Xác định biểu thức dấu ngoặc nhập vào là đúng hay sai?
    Gửi bởi mp121209 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 17
    Bài viết cuối: 06-10-2010, 10:36 AM
  5. CT chạy đúng kết quả với BC 3.1 nhưng không đúng với BC 5.02
    Gửi bởi PGD trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 4
    Bài viết cuối: 03-01-2010, 03:00 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