Announcement

Collapse
No announcement yet.

Vấn đề về truyền tham biến, tham trị là mảng

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Vấn đề về truyền tham biến, tham trị là mảng

    Các anh chị và các bạn cho mình hỏi có cách nào truyền mảng vào hàm mà không làm thay đổi giá trị của mảng sau khi xử lí trong hàm đó ko? xin cảm ơn

  • #2
    Originally posted by 14520234 View Post
    Các anh chị và các bạn cho mình hỏi có cách nào truyền mảng vào hàm mà không làm thay đổi giá trị của mảng sau khi xử lí trong hàm đó ko? xin cảm ơn
    Tạo ra cái mảng mới, copy các phần tử qua rồi truyền cái mảng mới vào

    Comment


    • #3
      Originally posted by truonganpn View Post
      Tạo ra cái mảng mới, copy các phần tử qua rồi truyền cái mảng mới vào
      cách này độ phức tạp e nghĩ không ổn, còn dùng con trỏ thì nó sẽ trỏ về địa chỉ của mảng trc thành ra vẫn bị thay đổi, à e quên nói trước là công việc trong hàm sẽ thực hiện n lần
      Lần sửa cuối bởi 14520234; Hôm nay lúc 16:45

      Comment


      • #4
        Originally posted by truonganpn View Post
        Tạo ra cái mảng mới, copy các phần tử qua rồi truyền cái mảng mới vào
        cách này độ phức tạp e nghĩ không ổn, còn dùng con trỏ thì nó sẽ trỏ về địa chỉ của mảng trc thành ra vẫn bị thay đổi, à e quên nói trước là công việc trong hàm sẽ thực hiện n lần
        Lần sửa cuối bởi 14520234; Hôm nay lúc 16:45

        Comment


        • #5
          Originally posted by 14520234
          cách này độ phức tạp e nghĩ không ổn, còn dùng con trỏ thì nó sẽ trỏ về địa chỉ của mảng trc thành ra vẫn bị thay đổi, à e quên nói trước là công việc trong hàm sẽ thực hiện n lần
          Cách này có gì phức tạp mà không ổn em?
          Thông thường ta truyền mảng vào hàm là để điều chỉnh nó cho phù hợp.
          Nếu em không muốn nó thay đổi thì tạo ra bản sao của nó (có thể truyền mảng cũ vào, rồi tạo bản sao ở trong hàm con và thao tác trên mảng con này)
          Đừng bán rẻ mình...
          Mà phải BÁN ĐÚNG GIÁ!!!

          Comment


          • #6
            Originally posted by 13520747 View Post
            Cách này có gì phức tạp mà không ổn em?
            Thông thường ta truyền mảng vào hàm là để điều chỉnh nó cho phù hợp.
            Nếu em không muốn nó thay đổi thì tạo ra bản sao của nó (có thể truyền mảng cũ vào, rồi tạo bản sao ở trong hàm con và thao tác trên mảng con này)
            Nếu e có một mảng, cứ mỗi vòng lặp e muốn sử dụng lại mảng ban đàu thì có giải pháp gì không ạ? Tại truyền tham biến mảng trong C khác Pascal quá

            Comment


            • #7
              Originally posted by 14520234 View Post
              Nếu e có một mảng, cứ mỗi vòng lặp e muốn sử dụng lại mảng ban đàu thì có giải pháp gì không ạ? Tại truyền tham biến mảng trong C khác Pascal quá
              Cụ thể là em làm gì ở trong vòng lặp đó?
              Anh vẫn chưa nghĩ ra em làm như thế để làm gì :look_down:
              Đừng bán rẻ mình...
              Mà phải BÁN ĐÚNG GIÁ!!!

              Comment


              • #8
                Originally posted by 13520747 View Post
                Cụ thể là em làm gì ở trong vòng lặp đó?
                Anh vẫn chưa nghĩ ra em làm như thế để làm gì :look_down:
                À e đang code bài NKSEQ trên spoj. http://vn.spoj.com/problems/NKSEQ/
                Ý tưởng của e là lặp lại mảng a, tạo thành vòng tròn, có một mảng S tính tổng từ 1-2n.
                For từ 1 - n, sort lại mảng s từ i- n+i-1, nếu s[i]-s[i-1] <0 thì điểm đó không phải điểm tốt

                Comment


                • #9
                  Originally posted by 14520234 View Post
                  À e đang code bài NKSEQ trên spoj. http://vn.spoj.com/problems/NKSEQ/
                  Ý tưởng của e là lặp lại mảng a, tạo thành vòng tròn, có một mảng S tính tổng từ 1-2n.
                  For từ 1 - n, sort lại mảng s từ i- n+i-1, nếu s[i]-s[i-1] <0 thì điểm đó không phải điểm tốt
                  Đọc sơ qua đề thì bài này kiểm tra j có phải là "tốt" hay không tốn một lần duyệt mảng, có tổng cộng n cái j trong mảng vậy tốn n lần duyệt mảng. Còn cách của em có n lần sort mảng s. Sort thì chắc chắn lâu hơn rất nhiều so với duyệt nên có vẻ như cách của em không có ổn cho lắm.

                  Comment


                  • #10
                    Originally posted by 14520234 View Post
                    À e đang code bài NKSEQ trên spoj. http://vn.spoj.com/problems/NKSEQ/
                    Ý tưởng của e là lặp lại mảng a, tạo thành vòng tròn, có một mảng S tính tổng từ 1-2n.
                    For từ 1 - n, sort lại mảng s từ i- n+i-1, nếu s[i]-s[i-1] <0 thì điểm đó không phải điểm tốt
                    Anh chưa test, nhưng rõ ràng ý tưởng của em "nghe là thấy nản" rồi
                    Em thử cách dưới xem

                    Code:
                    int count_good_position = 0;
                    
                    for(int i = 0; i < n; i++)
                    {
                    	int sum = 0;
                    	int count = 0;
                    	int flag = 1;
                    	for(int j = i; count < n; count++)
                    	{
                    		sum += a[j];
                    		if(sum < 0)
                    		{	
                    			flag = 0;
                    			break;
                    		}
                    			
                    		j++;
                    		j = j % n;
                    	}
                    	
                    	if (flag == 1)
                    		count_good_position++;
                    }
                    Đừng bán rẻ mình...
                    Mà phải BÁN ĐÚNG GIÁ!!!

                    Comment


                    • #11
                      Originally posted by truonganpn View Post
                      Đọc sơ qua đề thì bài này kiểm tra j có phải là "tốt" hay không tốn một lần duyệt mảng, có tổng cộng n cái j trong mảng vậy tốn n lần duyệt mảng. Còn cách của em có n lần sort mảng s. Sort thì chắc chắn lâu hơn rất nhiều so với duyệt nên có vẻ như cách của em không có ổn cho lắm.
                      Tại e tính độ phức tạp chỉ có nlgn
                      E dùng quicksort
                      14520234
                      Trần Việt Hạ
                      Last edited by 14520234; 25-10-2014, 09:33.

                      Comment


                      • #12
                        Originally posted by 13520747 View Post
                        Anh chưa test, nhưng rõ ràng ý tưởng của em "nghe là thấy nản" rồi
                        Em thử cách dưới xem

                        Code:
                        int count_good_position = 0;
                        
                        for(int i = 0; i < n; i++)
                        {
                        	int sum = 0;
                        	int count = 0;
                        	int flag = 1;
                        	for(int j = i; count < n; count++)
                        	{
                        		sum += a[j];
                        		if(sum < 0)
                        		{	
                        			flag = 0;
                        			break;
                        		}
                        			
                        		j++;
                        		j = j % n;
                        	}
                        	
                        	if (flag == 1)
                        		count_good_position++;
                        }
                        Để e thử xem

                        Comment


                        • #13
                          Originally posted by 14520234 View Post
                          Tại e tính độ phức tạp chỉ có nlgn
                          Học CTDL đó giờ anh chả biết cái độ phức tạp tính ra sao nữa :salute:
                          Đừng bán rẻ mình...
                          Mà phải BÁN ĐÚNG GIÁ!!!

                          Comment


                          • #14
                            Originally posted by 13520747 View Post
                            Học CTDL đó giờ anh chả biết cái độ phức tạp tính ra sao nữa :salute:
                            Cách tính được độ phức tạp là nội dung môn "Phân tích thiết kế thuật toán" nhé, em học thêm đi rồi biết

                            Originally posted by 14520234 View Post
                            Tại e tính độ phức tạp chỉ có nlgn
                            E dùng quicksort
                            Không cần dùng đến kiến nlgn gì gì cho cao siêu cả, tui chỉ biết chắc chắn là sắp xếp thì sẽ lâu hơn duyệt thôi em

                            Comment


                            • #15
                              Bài này em có thể dùng QHĐ để tính, ĐPT chỉ khoảng O(N) :
                              - Gọi F[i] là giá trị nhỏ nhất trong các dãy a[i], a[i] + a[i+1], .. , a[i] + a[i+1] + a[i+2] + .... a[n] + a[1] + a[2] + ... + a[i-1].
                              - Công thức QHĐ : F[i] = Min(A[i], F[i + 1] + A[i]), i = n-1 -> 1.
                              Điều kiện để i là 1 vị trí tốt là A[i] > 0 và F[i] > 0
                              12520527
                              Dương Quốc Tín
                              Last edited by 12520527; 26-10-2014, 15:55.
                              “ Đơm hoa không kết trái thì có sao?

                              Là cá thì nhất định phải bơi ư?

                              Ai bảo cuộc đời là phải sống,
                              Ai bảo đau khổ rồi cũng sẽ qua,
                              Ai bảo bài hát là phải có dạo đầu,

                              Phá vỡ ranh giới để tìm kiếm điều gì đó...”

                              Comment

                              LHQC

                              Collapse
                              Working...
                              X