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

Đề tài: Tối ưu code

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

    Mặc định Tối ưu code

    Xin chào! Tôi từng gặp một số câu hỏi test mà tới giờ vẫn chưa biết thế nào. Xin mọi người chỉ giúp:

    Tối ưu đoạn code sau:
    1.
    for(int i=0;i<100;i++)
    array[i]=0;

    2.

    for(int i=0;i<100;i++)
    for(int j=0;j<100;j++)
    matrix[i][j]=0;
    3.
    s=1;
    for(int i=1;i<10000;i++)
    s*=i;

    Thật sự trước sau gì cũng phải duyệt với số lần như vậy, ko hiểu người ra đề có ý định gì (phải chăng đem phép gán hoặc phép tính đem bỏ vào trong vòng lặp). Xin mọi người cho ý kiến, chân thành cám ơn!

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

    gan cho array[100]=0;
    matrix[100][100]=0;
    o phan khai bao
    To nghi la nhu the vi mon nay to cung moi hoc

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

    câu 1 và câu 2:
    C Code:
    1. int A[100]={0};
    2. int Matrix[100][100]={0};

    câu 3 tìm ra công thức truy hồi của nó rồi bỏ vào tính.

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

    Chào bạn! Mình đã tìm mấy hôm nay, công thức truy hồi của nó là gì? bạn vui lòng giúp luộn, mình chỉ tìm được công thức tính cho S=1+2+...+n=n*(n+1)/2.
    Chân thành cám ơn!

  5. #5
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    - Cho 2 cái vòng lặp thì nếu cậu dùng pointer thì sẽ nhanh hơn cho mỗi operation. Cái thứ 2 không cần phải dùng 2 vòng lặp, 1 vòng cũng được.
    - Câu cuối thì dùng bitwise( <<, >>, |, &, ^ )chắc chắn sẽ nhanh hơn nhiều.

  6. #6
    Ngày gia nhập
    11 2008
    Bài viết
    186

    Mặc định Tối ưu code

    1,2 : memset()

    3: chính là giai thừa chứ là cái gì mà các bác nghĩ sâu xa công thức này nọ
    s = 10000! <--- nghe chừng hơi khủng
    có lẽ bác nên xem lại đề
    Ước mơ vươn tới Linux Developer.
    Đang trong quá trình tập luyện:
    1. C system programming
    2. GNU distribution
    3. Gtk+/Gnome Application Programming.

    Bác nào giỏi lĩnh vực này giúp Kim với nha. Kim cám ơn nhiều !!!

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

    Ừ! Xin lỗi là tôi có nhầm về giá trị, 10000! đúng là quá lớn, tuy nhiên vấn đề cần hỏi là cách tính tối ưu cho bài toán giai thừa này. Cám ơn những câu trả lời của mọi người rất nhiều.

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

    Câu 1,2 tốt hơn dùng zeromemory.
    Kiểu int a[100] = {0} ; không còn xài được.

    Giai thừa có công thức mà bạn ?

    Dựa vào công thức đó rồi tính nó lên char*

    < nói thế thôi chớ thằng kidkid nó cũng dốt vãi ra >

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

    Chào mọi người!
    Sau vài hôm tìm hiểu, tôi có vài ý kiến sau:
    câu 1,2: khai báo: int array[100] ={1,2}; những phần tử còn lại của màng từ vị trí thứ 2 -> 99 sẽ có giá trị 0, nên giải đáp cho câu 1.2 là:
    int array[100]={0};
    int matrix[100][100]={0;
    Nếu muốn set một giá trị khác chẳng hạn 1, đối với kiểu char dùng hàm memset thì được, nhưng với kiểu int thì.... mém chút nữa là set được. Đề nghị dùng hàm STD::fill(array,array+100,1).

    câu 3: tôi cũng đang cố tìm công thức tính giai thừa để code không dùng đệ qui và cũng không dùng vòng lặp, trước mắt xin ghi nhận cách xử lý trên bit << >> | ~ & .

  10. #10
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Tui đoán chắc câu 1 2 không thể dùng cách đó, vì đó là khởi tạo chứ không phải operation.
    Java Code:
    1. #include <iostream>
    2.  
    3. const int MAX = 10;
    4. void do_assign( int ary[][ MAX ] ) {
    5.     for( int* o = &ary[ 0 ][ 0 ]; o <= &ary[ MAX - 1 ][ MAX - 1 ]; ++o ) {
    6.         *o = 1;
    7.     }
    8. }
    9.  
    10. int main() {
    11.     int ary[ MAX ][ MAX ];
    12.     do_assign( ary );
    13.  
    14.     return 0;
    15. }
    Dùng hàm memset hay std::fill cũng ok có điều tránh 1 function called thì viết thẳng ra.
    Câu 2 thì tui đoán chắc 100 họ muốn bitwise hack nhưng giờ thì tui đang thi, tui sẽ suy nghĩ về cái đó sau !

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

  1. Tại sao lại bỏ Store Proceduce nếu code theo hướng Code First trong MVC3
    Gửi bởi rogerminh2401 trong diễn đàn Thắc mắc lập trình ASP.NET
    Trả lời: 5
    Bài viết cuối: 02-11-2012, 08:22 PM
  2. Trả lời: 5
    Bài viết cuối: 27-04-2012, 07:51 PM
  3. compiler Warning: Unreachable code và chạy sai trong khi code đúng. Vì sao?
    Gửi bởi lovemoney trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 19
    Bài viết cuối: 19-01-2012, 10:02 PM
  4. Bài tập C++ Nhập code và name sv vào in ra thì name in đúng nhưng code thì in ra cả 2 code lẫn name
    Gửi bởi spacy0212 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: 27-09-2011, 08:47 AM
  5. Code quản lý sinh viên bằng danh sách lối vòng. Giúp mình thay đổi code kế thừa?
    Gửi bởi caocanha trong diễn đàn Thảo luận, góp ý code C/C++ của bạn
    Trả lời: 6
    Bài viết cuối: 04-05-2009, 03:39 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