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

Đề tài: tạo ma trận từ mảng 1 chiều?????

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

    Mặc định tạo ma trận từ mảng 1 chiều?????

    mình đang pí vấn đề này, mong các bạn chỉ giúp, mình có 1 mảng 1 chiều gồm các chuỗi sau:
    string[] str=new string[5] {"Lan", "Hue", "Mai", "Hong", "Nga"};

    Trong C# 2005, mình muốn tạo 1 ma trận có 10 dòng và 2 cột (nghĩa là tạo 10 nhóm phân biệt, mỗi nhóm có 2 người), bằng cách ghép 1 phần tử trong mảng 1 chiều với các phần tử còn lại như dưới đây:
    "Lan" , "Hue"
    "Lan" , "Mai"
    "Lan" , "Hong"
    "Lan" , "Nga"
    "Hue" , "Mai"
    "Hue" , "Hong"
    "Hue" , "Nga"
    "Mai" , "Hong"
    "Mai" , "Nga"
    "Hong", "Nga"
    ...mình dùng 2 vòng for như sau :
    for(int i=0 ; i< 5-1 ; i++)
    for(int j=i+1; j < 5 ; j++)
    ...tới đây thì mình pí lù, mong các bạn chỉ giúp, làm sao để chép các phần tử riêng lẻ của mảng 1 chiều vào ma trận giống như trên... rất cám ơn

  2. #2
    Ngày gia nhập
    06 2007
    Nơi ở
    Hà Nội
    Bài viết
    361

    vòng lặp đúng rồi, đến đây chỉ việc chép str[i] và str[j] vào một mảng 2 chiều thôi
    Blog tổng quan kiến thức về viễn thông : http://tongquanvienthong.blogspot.com/

    mSPDict từ điển android hỗ trợ liên kết tra trên các trình đọc sách điện tử và tra sách giấy thông qua camera
    http://www.tinhte.vn/threads/691731/

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

    Bạn thử code này xem:

    string[] a = new string[5] { "Lan", "Hue", "Mai", "Hong", "Nga" };
    string[] col1 = new string[10];
    string[] col2 = new string[10];
    string[,] M = new string[10, 2];
    int index = 0;
    int index1 = 0;
    int m=4;
    while (m > 0)
    {
    int j=0;
    for (int i = 0; i < m; i++)
    {

    col1[index++] = a[4 - m];
    col2[index1++] = a[5 - m + j];
    j++;
    }

    m--;
    }
    for (int i = 0; i < 10; i++)
    {
    M[i, 0] = col1[i];
    M[i, 1] = col2[i];
    }
    for (int i = 0; i < 10; i++)
    {
    for (int j = 0; j < 2; j++)
    Console.Write("{0}", M[i, j]);
    Console.WriteLine();
    }

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

    Nếu theo ý của bạn thì phải dùng 1 struct đúng hơn chứ, mà 2 vòng lặp bạn làm được rồi thì còn gì nữa đâu.

    Đây là ý kiến của mình:
    Code:
    struct capten
    {
    	string ten1;
    	string ten2;
    };
    
    string[] str=new string[5] {"Lan", "Hue", "Mai", "Hong", "Nga"};
    
    capten[] mangstr=new capten[10];
    
    int k=-1;
    for(int i=0;i<str.Lenght-1;i++)
    {
    	for(int j=i+1;j<str.Lenght;j++)
    	{
    		k++;
    		mangstr[k].ten1=str[i];
    		mangstr[k].ten2=str[j];		
    	}
    }
    Mình gõ bằng bằng notepad nên chưa kiểm tra, bạn kiểm tra giúp nhé

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

    rất cám ơn các bạn đã giúp đỡ, mình làm được rồi

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

    Mặc định tạo ma trận từ mảng 1 chiều?????

    code mà các bạn post ở trên mình chỉ dùng được khi số người trong 1 nhóm là 1 số nhất định, bây giờ mình muốn viết 1 hàm mà khi đưa vào số n người trong 1 nhóm thì nó sẽ xuất ra 1 ma trận gồm có (5 chập n)dòng và n cột thì mình phải viết như thế nào, mình nghĩ nhóm 2 người thì 2 vòng for nếu n người thì n vòng for còn gán các phần tử vào ma trận thì chắc là không thể nào viết như trên được rồi, mong các bạn giúp mình thêm lần nữa, vô cùng biết ơn

  7. #7
    Ngày gia nhập
    09 2006
    Nơi ở
    /usr/share/.hack@
    Bài viết
    1,433

    Lập trình theo đúng kiểu C# OOP một chút :

    Code:
    class SapXepTen {
           // init contructor
           public SapXepTen() { }
           public SapXepTen(string[] mangTen) { }
              
           // properties
           public SoLuongTen { get; set; }
          
           // method
           public string[] getTens() { }
           public string    getTen(int vitri) { }
           public string    setTen(int vitri) { }
           public string[] SapXep(string[] ten) { }
           public string    getNext() { }
           public string    chuyenThanh1Mang(string[] chuoiCacten) { }
    }
    Cái khung như thế viết code có đẹp hơn không ^_^
    None!

  8. #8
    Ngày gia nhập
    07 2007
    Bài viết
    44

    Đúng là không thể biết dùng bao nhiêu vòng for, thay vào đó ta sẽ dùng đệ qui, mà mình không hay dùng đệ qui, phải đành tìm qui luật thôi.
    Ví dụ như 5 chập 3 chẳng hạng, thì ta sẽ có kết quả như sau:
    Ta sẽ được kết quả như sau:
    Lan Hue Mai
    Lan Hue Hong
    Lan Hue Nga
    Lan Mai Hong
    Lan Mai Nga
    Lan Hong Nga
    Hue Mai Hong
    Hue Mai Nga
    Hue Hong Nga
    Mai Hong Nga
    ------------- Tương đượng với các chỉ số trong mảng 1 chiều của bạn là
    0 1 2
    0 1 3
    0 1 4
    0 2 3
    0 2 4
    0 3 4
    1 2 3
    1 2 4
    1 3 4
    2 3 4

    Theo cách làm của toán, ban đầu bạn có 012, bạn sẽ nhìn vào số 2, bạn thấy nó chưa lớn hơn 4, bạn sẽ tăng 2 thành 3, ok?
    Khi tới dãy 014, bạn nhìn thấy số 4, bạn sẽ nhìn sang số 1 và bạn thấy 1 còn nhỏ hơn 3, bạn tăng số 1 lên thành 2 và sau số 2 phải là số 3 ok?

    Vậy ta sẽ có hàm, nhận 1 mảng 1 chiều và 1 số max, bạn sẽ tìm cách tăng lên 1 dơn vị

    Code:
    void TangSo(int max,int[] dayso)
    {
    	int k=0;
    	for(int i=dayso.Length-1;i>=0;i--)
    	{
    		if(dayso[i]<max-k)
    		{
    			dayso[i]++;
    			for(int j=i+1;j<dayso.Length;j++)
    				dayso[j]=dayso[j-1]+1;
    			return;
    		}
    		k++;
    	}
    }
    Công viêc còn lại dễ dàng rồi, bạn sẽ tạo mảng 1 chiều có n(nhập vào) phần tử các chỉ số trong str[] của mạng, đó là các dòng :
    0 1 2
    0 1 3
    0 1 4
    .......
    khởi đầu bằng dòng 0 1 2, sau đó dùng hàm TangSo để thay đổi nó, tương ứng lúc này bạn sẽ bỏ chuỗi vào trong 1 ma trận mới:

    Code:
    string[] str=new string[5] {"Lan", "Hue", "Mai", "Hong", "Nga"};
    
    int dong,cot;
    cot=int.Parse....
    //tính tổ hợp, không biết đúng công thức không nữa
    dong=giaithua(5)/(giaithua(5-cot)*giaithua(cot));
    int[] mangvitri=new int[cot];
    for(int i=0;i<cot;i++)
    	mangvitri[i]=i;
    string[,] matran=new string[dong,cot];
    for(int i=0;i<dong;i++)
    {
    	for(int j=0;j<cot;j++)
    		matran[i,j]=str[mangvitri[j]];
    	TangSo(4,mangso);
    }
    Kiểm tra lại giúp mình nhé!
    Đã được chỉnh sửa lần cuối bởi thienthanit : 25-07-2007 lúc 08:36 PM.

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

    cám ơn thienthanit, đoạn code bạn chỉ mình hay thật, lại tránh được đệ qui nữa chứ, nói chung là cám ơn tất cả các bạn đã chỉ dẫn, forum này thật là bổ ích cho những người mới học như mình

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

    Tôi làm đơn giản như sau:
    Code:
    string[] str = new string[5] { "Khanh", "Nga", "Dong", "teo", "ut" };
                for (int i = 0; i < 5; i++)
                {
                    for (int j = 0; j < 5; j++)
                    {
                        if (str[i]!=str[j])
                        {
                            Console.WriteLine("{0}={1}", str[i],str[j]);
                        }
                        
                    }
                    
                }

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

  1. [Hỏi] Cách nhân 2 ma trận với các phần tử của ma trận đợc để trong mảng 1 chiều.
    Gửi bởi code_c trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 4
    Bài viết cuối: 23-09-2012, 10:24 PM
  2. Xoay ma trận một góc 90 độ ngược chiều kim đồng hồ vối ma trận thường
    Gửi bởi prince7seas trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 5
    Bài viết cuối: 11-07-2012, 10:03 PM
  3. Algorithm Chia ma trận thành các ma trận con bằng nhau như thế nào
    Gửi bởi xinbat trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 1
    Bài viết cuối: 30-12-2011, 11:14 PM
  4. Code cộng, trừ, nhân, chia ma trận bằng C++. Chọn cộng ma trận thì bị out?
    Gửi bởi VanDK90 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: 18-10-2010, 05:53 PM
  5. Bài tập về ma trận | Cộng trừ nhân chia ma trận theo con trỏ?
    Gửi bởi nhocxinh trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 10
    Bài viết cuối: 12-05-2009, 01:59 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