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

Đề tài: Kiễm Tra dãy nghiêm ngặt

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

    Mặc định Kiễm Tra dãy nghiêm ngặt

    Chào các bác,
    Đây là bài tập :
    Cho dãy số nguyên n ( n<200) phần tử : A0, Á, ...An-1.Dãy được gọi là nghiêm ngặt nếu A( i-1) < Ai (i thuộc (1,n) (Ai<70.000)
    Yêu cầu : KT xem dãy có gọi là nghiêm ngặt ko ? Nếu có xuất ra -1 ko thì xuất ra vị trí i đầu tiên kể từ đầu dãy không thõa tính chất.
    Ví dụ
    Input :
    6
    1 3 5 6 4 7
    Output
    4

    Đây là bài mình làm và nó ra một dãy số.Tớ cần biết tớ sai chỗ nào.
    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #define MAX 200
    4.  
    5. void nhappt(int A[MAX],int n)
    6. {
    7.     scanf("%d",&n);
    8.     for(int i=0;i<n;i++)
    9.         scanf("%d",&A[i]);
    10. }
    11. int kt(int A[MAX],int i,int n)
    12. {
    13.     int nghiemngat=0;
    14.     for(i=0;i<n;i++)
    15.     {
    16.         if(A[i-1]>A[i])
    17.         {   printf("%d",i);
    18.         }
    19.         else nghiemngat=1;
    20.     }
    21.     if(nghiemngat==1)
    22.         return -1;
    23.  
    24. }
    25.  
    26.  
    27. void main()
    28. {
    29.     int A[MAX],n,i;
    30.     nhappt(A,n);
    31.     kt(A,i,n);
    32.     printf("%d",kt(A,i,n));
    33. }

    Cảm ơn các bạn nhiều.Tuy là bài đơn giản nhưng tớ đã làm sai.

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

    bài của mình
    C++ Code:
    1. int kt(int a[MAX], int n)
    2. {
    3.     int i = 0;
    4.     while ((i < n - 1) && (a[i] <= a[i + 1]) && (++i));
    5.     return (i == --n) ? - 1 : ++i;
    6. }

    sửa lại bài của bạn
    C++ Code:
    1. int kt(int A[MAX],int n) //biến i truyền vào hàm không có tác dụng gì cả
    2. {
    3.     for(int i=1;i<n;i++) //biến i cần dùng trong vòng for lại không khai báo, và phải đặt i = 1 chứ không phải = 0
    4.     {
    5.         if(A[i-1]>A[i])
    6.         {  
    7.             return i; //tìm được phần tử không thỏa mãn thì trả lại luôn, không duyệt tiếp nữa
    8.         }
    9.     }
    10.     return -1; //nếu không tìm được phần tử nào thì mới trả lại -1;
    11.    
    12. }

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

    Trích dẫn Nguyên bản được gửi bởi greigaz Xem bài viết
    bài của mình
    C++ Code:
    1. int kt(int a[MAX], int n)
    2. {
    3.     int i = 0;
    4.     while ((i < n - 1) && (a[i] <= a[i + 1]) && (++i));
    5.     return (i == --n) ? - 1 : ++i;
    6. }

    sửa lại bài của bạn
    C++ Code:
    1. int kt(int A[MAX],int n) //biến i truyền vào hàm không có tác dụng gì cả
    2. {
    3.     for(int i=1;i<n;i++) //biến i cần dùng trong vòng for lại không khai báo, và phải đặt i = 1 chứ không phải = 0
    4.     {
    5.         if(A[i-1]>A[i])
    6.         {  
    7.             return i; //tìm được phần tử không thỏa mãn thì trả lại luôn, không duyệt tiếp nữa
    8.         }
    9.     }
    10.     return -1; //nếu không tìm được phần tử nào thì mới trả lại -1;
    11.    
    12. }
    Cảm ơn bạn rất nhiều nhưng nó vẫn sai cậu ạ,Nó ra thông báo là -1
    C Code:
    1. #include <conio.h>
    2. #include <stdio.h>
    3. #define MAX 200
    4.  
    5. void nhappt(int A[MAX],int n)
    6. {
    7.     scanf("%d",&n);
    8.     for(int i=0;i<n;i++)
    9.         scanf("%d",&A[i]);
    10. }
    11.  
    12. int kt(int A[MAX],int n)
    13. {
    14.     int nghiemngat=0;
    15.     for(int i=1;i<n;i++)
    16.     {
    17.         if(A[i-1]>A[i])
    18.             return i;
    19.     }
    20.     return -1;
    21.  
    22. }
    23.  
    24.  
    25. void main()
    26. {
    27.     int A[MAX],n,i;
    28.     nhappt(A,n);
    29.     kt(A,n);
    30.     printf("%d",kt(A,n));
    31. }

  4. #4
    Ngày gia nhập
    04 2011
    Nơi ở
    Hà Nội
    Bài viết
    253

    hàm nhập mảng của bạn có vấn đề, mình sửa lại thế này:
    C++ Code:
    1. void nhappt(int A[MAX],int* n) //truyền theo kiểu pointer
    2. {
    3.     scanf("%d",n);
    4.     for(int i=0;i<*n;i++)
    5.         scanf("%d",&A[i]);
    6. }

    hàm main sửa lại như sau
    C++ Code:
    1.  
    2. int main()
    3. {
    4.     int A[MAX],n; //biến i ở đây không cần thiết, bỏ đi
    5.     nhappt(A,&n);
    6.     kt(A,n);
    7.     printf("%d",kt(A,n));
    8.     return 0;
    9. }

    (Để hiểu thêm về pointer, bạn có xem bài viết http://diendan.congdongcviet.com/showthread.php?t=42977)
    Đã được chỉnh sửa lần cuối bởi greigaz : 10-05-2012 lúc 10:53 PM.

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

  1. Lỗi màn hình xanh nghiêm trọng chưa từng thấy?
    Gửi bởi xoycontinue trong diễn đàn Thắc mắc chung
    Trả lời: 30
    Bài viết cuối: 08-08-2011, 09:12 AM
  2. Hỏi đáp Các dạng đề tài/bài viết nằm trong danh sách nghiêm cấm tại diễn đàn cộng đồng C Việt!
    Gửi bởi Kevin Hoang trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 0
    Bài viết cuối: 17-05-2011, 03:06 PM
  3. Thật toán xuất dãy con no tăng nghiêm ngặt trên C++?
    Gửi bởi nhoemlem trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 28-04-2009, 11:16 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