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

Đề tài: Bài tập mảng, xóa phần tử có giá trị gần x nhất

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

    Mặc định Bài tập mảng, xóa phần tử có giá trị gần x nhất

    em xin bắt đầu luôn. Đầu tiên đề bài là nhập 1 mảng gồm n kí tự, nhập x, tìm các phần tử có giá trị gần với x nhất và xóa chúng ra khỏi mảng

    Em đã code xong và đây là bài code của em. Nhưng vấn đề của em là :

    B1 : nhập vào 1 mảng 5 số gồm : 1 2 6 4 5
    B2 : Nhập x là 3
    Nó sẽ chỉ xóa số 2 mà không xóa số 4 ... mà 2 với 4 đều cách 3 có 1 đơn vị. Em hiểu lỗi đó nhưng em không biết code làm sao cho hợp lí. Mong anh em giúp

    C Code:
    1.  #include<stdio.h>
    2.  #include<conio.h>
    3.  
    4.  void cut (int a[],int &n,int y);
    5.  
    6.  void main()
    7.  {
    8.     clrscr();
    9.     int a[20],i,n,min=0,x,y,tg;
    10.     printf("Insert n"); scanf("%d",&n);
    11.     printf("Insert x"); scanf("%d",&x);
    12.     for(i=0;i<n;i++)
    13.         {
    14.             scanf("%d",&a[i]);
    15.             if(a[i]>min)
    16.                 min=a[i];
    17.         }
    18.     for(i=0;i<n;i++)
    19.         {
    20.             if(a[i]>x)
    21.                 tg=a[i]-x;
    22.             else
    23.                 tg=x-a[i];
    24.             if(tg<min)
    25.                 {
    26.                     min=tg;
    27.                     y=a[i];
    28.                 }
    29.         }
    30.     cut(a,n,y);
    31.     getch();
    32.  }
    33.  
    34.  void cut (int a[],int &n,int y)
    35.  {
    36.     int i,j;
    37.     for(i=0;i<n;i++)
    38.         if(a[i]==y)
    39.             {
    40.                 for(j=i;j<n-1;j++)
    41.                     a[j]=a[j+1];
    42.                 n--;
    43.             }
    44.     printf("\n\n");
    45.     for(i=0;i<n;i++)
    46.         printf("%d\t",a[i]);
    47.  }
    90% thành viên vào chỉ để hỏi một câu sau đó té luôn
    5% thành viên vào chỉ để hỏi không để chia sẻ
    3% có tinh thần chia sẻ
    2% còn lại là BQT

  2. #2
    Ngày gia nhập
    06 2008
    Bài viết
    54

    Bạn dùng biến tg và biến min là hợp lý nhất rồi. Chỉ cần sử dụng biến min là ta có thể xét điều kiện.

    Biến tg dùng để tính d hay nói cách khác là độ lệch giữa x và số (đang xét).
    Biến min dùng để lưu lại độ lệch nhỏ nhất (đang xét).

    Ta có:
    Nếu min = 1: x + min = 4;
    Nếu min = -1: x + min = 2;

    Vậy: Chỉ cần cho vào hàm Cut(..., x, min) là xử lý đẹp con 2.
    C++ Code:
    1.  #include<stdio.h>
    2.  #include<conio.h>
    3. #include <math.h>
    4.  
    5. void cut (int [], int &, int, int);
    6. void main(){
    7.     clrscr();
    8.     int a[20], i, n, min=0, x, y, tg;
    9.     ...
    10.     for(i=0;i<n;i++){
    11.  
    12.         /** Tìm độ lệch **/
    13.         tg = fabs(a[i] - x); // Lấy trị tuyệt đối hiệu 2 số
    14.        
    15.         if(x + tg != a[i]){
    16.             tg = -tg; // Đổi dấu
    17.         }
    18.         /** Kết Thúc **/
    19.  
    20.         if(tg < min){ // Tìm độ lệch nhỏ nhất...
    21.             min = tg;
    22.         }
    23.     }
    24.     cut(a, n, x, min);
    25.     getch();
    26. }
    27.  
    28. void cut (int a[], int &n, int x, int d){
    29.     int i, j;
    30.     for(i = 0; i < n; i++){
    31.         if(a[i] == x + d){
    32.             for(j = i; j < n - 1; j++){
    33.                 a[j] = a[j + 1];
    34.             }
    35.             n--;
    36.         }
    37.     }
    38.    
    39.     printf("\n\n");
    40.    
    41.     for(i = 0; i < n; i++){
    42.         printf("%d\t", a[i]);
    43.     }
    44. }
    Đã được chỉnh sửa lần cuối bởi huugiang954 : 03-08-2011 lúc 12:03 AM. Lý do: Sửa lỗi khi trừ 2 số âm âm, dương âm, âm dương
    There are many things I want! It Killed Me!

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

    Trích dẫn Nguyên bản được gửi bởi lamrung Xem bài viết
    em xin bắt đầu luôn. Đầu tiên đề bài là nhập 1 mảng gồm n kí tự, nhập x, tìm các phần tử có giá trị gần với x nhất và xóa chúng ra khỏi mảng

    Em đã code xong và đây là bài code của em. Nhưng vấn đề của em là :

    B1 : nhập vào 1 mảng 5 số gồm : 1 2 6 4 5
    B2 : Nhập x là 3
    Nó sẽ chỉ xóa số 2 mà không xóa số 4 ... mà 2 với 4 đều cách 3 có 1 đơn vị. Em hiểu lỗi đó nhưng em không biết code làm sao cho hợp lí. Mong anh em giúp
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3.  
    4. void main()
    5. {
    6.     clrscr();
    7.     int a[20],b[20],c[20],i,n,n2=0,min_diff=SỐ_INT_CỰC_BỰ,x; // SỐ_INT_CỰC_BỰ = 0x7FFFFFFF nếu int là 4 byte; 0x7FFF nếu int là 2 byte
    8.     printf("Insert n"); scanf("%d",&n);
    9.     printf("Insert x"); scanf("%d",&x);
    10.     for(i=0;i<n;i++)
    11.     {
    12.         scanf("%d",&a[i]);
    13.         b[i] = (a[i] > x ? a[i] - x : x - a[i]);
    14.         if(b[i]<min_diff) min_diff = b[i];
    15.     }
    16.     for(i=0;i<n;i++)
    17.     {
    18.         if(b[i]>min_diff)
    19.         {
    20.             c[n2++] = a[i];
    21.             printf("%d\t", a[i]);
    22.         }
    23.     }
    24.         // Mảng c[] với n2 phần tử là mảng kết quả. Nếu chỉ cần in ra thì không cần khai báo mảng C và n2
    25.     getch();
    26. }

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

  1. Unlocker 1.9.1 full - Phần mềm xóa những file cứng đầu nhất
    Gửi bởi FrankanDK trong diễn đàn Software (Phần mềm) | Ebooks
    Trả lời: 0
    Bài viết cuối: 16-04-2012, 11:59 AM
  2. Kỹ thuật C Xóa một phần tử đã nhập trong mảng
    Gửi bởi nguyennhutbinh_269 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 1
    Bài viết cuối: 29-09-2011, 07:55 PM
  3. Bài tập C Xóa phần tử có giá trị nhỏ nhất
    Gửi bởi lytieubinh_269 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 28-09-2011, 01:27 PM
  4. Bài tập C++ Xóa các phần tử nhỏ hơn giá tri x nhập vào
    Gửi bởi da_da trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 27-06-2011, 02:13 AM
  5. Làm sao xóa phần tử nhỏ nhất trên dslk đơn( chỉ duyệt mảng 1 lần)
    Gửi bởi clanks trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 15
    Bài viết cuối: 22-12-2010, 08:37 AM

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