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ố 19 kết quả

Đề tài: xác định số nào là số đứng giữa 2 số còn lại trong 3 số

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

    Mặc định xác định số nào là số đứng giữa 2 số còn lại trong 3 số

    Đề Bài : Nhập vào 3 số nguyên A,B,C. Hãy xác định số nào là số đứng giữa 2 số còn lại trong 3 số đó. Yêu cầu không được gọi bất kỳ hàm được cung cấp săn nào, cũng như ko được dùng các lệnh if, for, while , do ... while,.... Chỉ được dùng các phép toán binh thường và lệnh printf, scanf để giải.
    HÌnh như là dùng toán tử trên bit

  2. #2
    Ngày gia nhập
    10 2006
    Nơi ở
    In Your Bugs
    Bài viết
    823

    ----------
    Về gấp ...
    Tí tớ lên sửa lại sau.
    Dùng a>b ? a:b có thể giải.
    Đã được chỉnh sửa lần cuối bởi kidkid : 28-12-2007 lúc 09:55 AM.

  3. #3
    Ngày gia nhập
    11 2007
    Bài viết
    153

    sặc bác kidkid nói em mới nhớ ,nhưng đề bài cho là tìm số đứng giữa mà?__? em có làm 1 bài chưa test hết các trường hợp ^^ post tạm anh em coi cho vui.
    Code:
    #include <stdio.h>
    #include <conio.h>
    
    void main()
    {
     int a,b,c;
     int max,min;
       printf("\n nhap a: ");
       scanf("%d",&a);
       printf("\n nhap b: ");
       scanf("%d",&b);
       printf("\n nhap c: ");
       scanf("%d",&c);
    
     max=(a>b)?a:b;
     min=(a<b)?a:b;
     max=(max<c)?c:min;
     printf("\n so dung giua 2 so la: %d",max);
     getch();
    }

  4. #4
    Ngày gia nhập
    06 2007
    Bài viết
    14

    Đây là bài tôi làm thử, đã test & thấy đúng. Anh em coi thử, có điều hơi dài và giải thuật thì dở.

    Code:
    void main ()
    {
    	int a[3];
    	float dis[3];
    	printf (" So thu 1 : ");
    	scanf ("%d",&a[0]);
    	printf (" So thu 2 : ");
    	scanf ("%d",&a[1]);
    	printf (" So thu 3 : ");
    	scanf ("%d",&a[2]);
    
    	float ave = (a[0] + a[1] + a[2]) / 3;
    	dis[0] = a[0] - ave;
    	dis[0] = (dis[0] > -dis[0]) ? dis[0] : -dis[0];
    	dis[1] = a[1] - ave;
    	dis[1] = (dis[1] > -dis[1]) ? dis[1] : -dis[1];
    	dis[2] = a[2] - ave;
    	dis[2] = (dis[2] > -dis[2]) ? dis[2] : -dis[2];
    
    	int result;
    	int temp;
    	result = (dis[0] < dis[1]) ? a[0] : a[1];
    	temp = (dis[0] < dis[1]) ? dis[0] : dis[1];
    	result = (temp < dis[2]) ? result : a[2];
    
    	printf ("So o giua la : %d\n",result);
    }
    Ta là ai không quan trọng, điều ta làm sẽ khẳng định con người ta!

  5. #5
    Ngày gia nhập
    11 2007
    Bài viết
    153

    cái này viết =C hay C++ thế bác ơi:-? , giải thuật của bác phiền phức quá , đây là cái đề bài của người mới học C thôi mà đâu có mảng đâu nhỉ:-? ^^!

  6. #6
    Ngày gia nhập
    12 2007
    Nơi ở
    Tp.HCM
    Bài viết
    24

    Mặc định xác định số nào là số đứng giữa 2 số còn lại trong 3 số

    Các bác giải toàn dùng (điều kiện ? A : B) thì nó cũng tương đương với if...else rồi còn gì. Như thế đâu phù hợp với yêu cầu đề bài là "không được dùng các lệnh if, for, while, do...while, ...."

  7. #7
    Ngày gia nhập
    11 2007
    Bài viết
    153

    sặc bác nói thế nào ý chứ em có dùng if else đâu mà, bác ngó lại coi em có cái if else nào trong bài không, cái (a>b)?a:b ở đây là 1 công thức thôi ko phải là lệnh kia đâu mà.

  8. #8
    Ngày gia nhập
    12 2007
    Nơi ở
    Tp.HCM
    Bài viết
    24

    Thì chức năng của (a>b)?a:b là tương đương với if (a>b) a; else b; mà.

    Mình có đoạn code để tham khảo đây (Không phải của mình):
    Code:
    #include <stdio.h>
    
    int exchange(int *x, int *y)
    {
       int a, b;
       a = *x;
        b = *y;
       *x = (b + ((a - b) & -(a < b)));
        *y = (b + ((a - b) & -(a > b)));
        return 0;
    }
    int main (void)
    {
       int a, b, c;
        
        printf("Enter the value of the 1st number: ");
        scanf("%d", &a);
        printf("Enter the value of the 2nd number: ");
        scanf("%d", &b);    
        printf("Enter the value of the 3rd number: ");        
        scanf("%d", &c);
        
        exchange(&a, &b);
        exchange(&a, &c);
        exchange(&b, &c);    
        
      printf("%d < %d < %d", a, b, c);
    }
    Bạn xem, có chỗ nào dùng điều kiện không, không if..else, cũng không (đk ? a : b)
    Đã được chỉnh sửa lần cuối bởi ilit : 28-12-2007 lúc 03:27 PM.

  9. #9
    Ngày gia nhập
    11 2007
    Bài viết
    153

    bó tay bài này thật hay quá thuật toán nhìn vãi lúa^^ mặc dù mới đầu coi không hiểu gì bác giải thích cho em cái chỗ
    Code:
     *x = (b + ((a - b) & -(a < b)));
        *y = (b + ((a - b) & -(a > b)));
    ở đây thì cái & là thế nào thế nhỉ:-? toán tử logic bitwise đúng không? bác làm ơn giải thích giùm em chỗ nó so sánh với , em có đọc trong giáo trình nhưng không hiểu vì nó nói không rõ ràng^^!

  10. #10
    Ngày gia nhập
    06 2007
    Bài viết
    14

    Gọi xxxxxxxx là 8bit số dạng nhị phân của kết quả (a-b)

    Biểu thức -(a < b): trả về 00000000 (0) nếu sai (tức a > b), trả về 11111111 (-1) nếu đúng (tức a < b)
    Toán tử & so sánh từng bit của 2 toán hạng, chỉ trả về 1 nếu bit tương ứng ở 2 toán hạng cùng là 1, các trường hợp còn lại trả về 0
    (a - b) & -(a < b): nếu phần -(a > b) là 00000000 thì kết quả lúc nào cũng là 00000000 (tức 0); nếu phần -(a < b) là 11111111 thì kết quả là xxxxxxxx (tức a-b)
    Như vậy biểu thức [b + ((a - b) & -(a < b))] trả về b nếu a > b ; ngược lại trả về a nếu a < b => Lấy min của a,b

    b + ((a - b) & -(a > b)) tương tự => Lấy max của a,b

    Giải thuật này đúng là hay thật, nhưng nếu để áp dụng cho người mới học C thì khó đấy, vì muốn hiểu được nó phải học cách biểu diễn số của máy, mà đây là 1 phần của lập trình hợp ngữ đó.
    Ta là ai không quan trọng, điều ta làm sẽ khẳng định con người ta!

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

  1. Lỗi Thêm dữ liệu của cột còn lại trong bảng sử dụng LinQ , MVC
    Gửi bởi bkit48 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 1
    Bài viết cuối: 26-05-2012, 06:31 PM
  2. code nhập xuất học sinh trong c-free thì chạy dc ,còn trong visual thì ko
    Gửi bởi art_mu trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 2
    Bài viết cuối: 08-02-2012, 10:37 PM
  3. Du học, hỏi đáp du học Thụy SĨ – Thụy Sĩ còn là một trong những nước công nghiệp phát tri
    Gửi bởi trungtdd trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 16-02-2011, 02:09 PM
  4. DSLK trong C++ còn cách nào hay hơn không ?
    Gửi bởi kidkid trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 7
    Bài viết cuối: 10-05-2007, 08:33 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