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

Đề tài: Ma trận xoắn ốc với giá trị ngẫu nhiên

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

    Mặc định Ma trận xoắn ốc với giá trị ngẫu nhiên

    - Đề bài là: sắp xếp mảng 2 chiều theo thứ tự xoắn ốc với các phần tử mảng có giá trị ngẫu nhiên
    - Cách làm của em là:
    + Đầu tiên khởi tạo 1 mảng 1 chiều với giá trị ngẫu nhiên đã sắp xếp từ bé đến lớn.
    + Tiếp theo lần lượt gán giá trị của mảng 1 chiều vào mảng 2 chiều theo thứ tự xoắn ốc.

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <stdlib.h>
    4.  
    5. void sort_tang(int ia[],int n)
    6. {
    7.     int i,j,x;
    8.     for(i=0;i<=n;i++)
    9.     {
    10.              for (j=i+1;j<=n;j++)
    11.             if(ia[i]>ia[j])
    12.             {
    13.                 x=ia[j];
    14.                 ia[j]=ia[i];
    15.                 ia[i]=x;
    16.             }
    17.     }
    18. }
    19.  
    20. void main()
    21. {
    22.     randomize();
    23.     int a[100][100],b[100];
    24.     int n,size;        
    25.     int hang,cot,lap,batdau=0,giatri,dem=0;      
    26.     printf("Nhap cap ma tran: ");
    27.     scanf("%d",&n);
    28.     size=(n*n)-1;
    29.     n-=1;
    30.     hang=n; cot=n;
    31.     if (n%2==0)
    32.         lap=n/2;
    33.     else
    34.         lap=(n/2)+1;
    35.     for (int i=0;i<=size;i++)
    36.         b[i]=random(101);
    37.     sort_tang(b,size);
    38.     printf("\n\nMang b da sap xep: \n");
    39.     for (int i=0;i<=size;i++)
    40.         printf("%d ",b[i]);
    41.     giatri=b[dem];
    42.     while (batdau<=lap)
    43.     {
    44.         for (int i=batdau;i<=cot;i++)
    45.         {
    46.             a[batdau][i]=giatri;
    47.             giatri=b[dem+1];
    48.         }
    49.         for (int i=batdau+1;i<=hang;i++)
    50.         {  
    51.             a[i][cot]=giatri;
    52.             giatri=b[dem+1];
    53.         }
    54.         for (int i=cot-1;i>=batdau;i--)
    55.         {
    56.             a[hang][i]=giatri;
    57.             giatri=b[dem+1];
    58.         }
    59.         for (int i=hang-1;i>=batdau+1;i--)
    60.         {
    61.             a[i][batdau]=giatri;
    62.             giatri=b[dem+1];
    63.         }
    64.         batdau++;hang--;cot--;
    65.     }
    66.     printf("\n\nXoan oc: \n");
    67.     for (int i=0;i<=n;i++)
    68.     {
    69.         for (int j=0;j<=n;j++)
    70.             printf("%5d",a[i][j]);
    71.         printf("\n");
    72.     }
    73.     getch();
    74. }

    - Lỗi là nó chỉ lấy giá trị thứ nhất và giá trị thứ 2 ra gán thui.
    - Vd:
    Mảng 1 chiều:
    10 14 16 25 47 68 77 89 99
    Xoắn ốc là:
    10 14 14
    14 14 14
    14 14 14

    - Lần đầu post bài có nếu có gì không đúng xin nhắc nhở ạ ^^!
    - Bài này em mới đọc đề code luôn nên chưa search xem có giải thuật gì khác tối ưu hơn không, ai biết thì cho em hay ^^!

  2. #2
    Ngày gia nhập
    09 2011
    Bài viết
    5

    đã tìm được lỗi rồi, post lại code luôn cho bạn nào cần , sẵn tiện có ai có cách nào tối ưu hơn thì cho em hay ^^
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    
    void sort_tang(int ia[],int n)
    {
    	int i,j,x;
    	for(i=0;i<=n;i++)
    	{
    	         for (j=i+1;j<=n;j++)
    			if(ia[i]>ia[j])
    			{
    				x=ia[j];
    				ia[j]=ia[i];
    				ia[i]=x;
    			}
    	}
    }
    
    void main()
    {
    	randomize();
    	int a[100][100],b[100];
    	int n,size;         
    	int hang,cot,lap,batdau=0,giatri,dem=0;       
    	printf("Nhap cap ma tran: ");
    	scanf("%d",&n);
    	size=(n*n)-1;
    	n-=1;
    	hang=n; cot=n;
    	if (n%2==0)
    		lap=n/2;
    	else 
    		lap=(n/2)+1;
    	for (int i=0;i<=size;i++)
    		b[i]=random(101);
    	sort_tang(b,size);
    	printf("\n\nMang b da sap xep: \n");
    	for (int i=0;i<=size;i++)
    		printf("%d ",b[i]);
    	giatri=b[dem];
    	while (batdau<=lap)
    	{
    		for (int i=batdau;i<=cot;i++)
    		{
    			a[batdau][i]=giatri;
                            dem++;
    			giatri=b[dem];
    		}
    		for (int i=batdau+1;i<=hang;i++)
    		{	
    			a[i][cot]=giatri;
                            dem++;
                        	giatri=b[dem];
    		}
    		for (int i=cot-1;i>=batdau;i--)
    		{
    			a[hang][i]=giatri;
                            dem++;	
                            giatri=b[dem];	
    		}
    		for (int i=hang-1;i>=batdau+1;i--)
    		{
    			a[i][batdau]=giatri;
                            dem++;
    			giatri=b[dem];
    		}
    		batdau++;hang--;cot--;
    	}
    	printf("\n\nXoan oc: \n");
    	for (int i=0;i<=n;i++)
    	{
    		for (int j=0;j<=n;j++)
    			printf("%5d",a[i][j]);
    		printf("\n");
    	}
    	getch();
    }

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

  1. Lập trình C Hàm tạo số ngẫu nhiên | Cách nhập giá trị ngẫu nhiên cho ma trận?
    Gửi bởi chuong01 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: 13-08-2012, 09:43 PM
  2. Lập trình C++ Sữa lỗi chương trình tạo ma trận ngẫu nhiên
    Gửi bởi duy0106 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 07-05-2012, 12:21 AM
  3. Lỗi ghi 3 trận ngẫu nhiên vào file
    Gửi bởi chuong01 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 6
    Bài viết cuối: 30-10-2009, 10:59 AM
  4. Cách Tạo giá trị ngẫu nhiên cho ma trận
    Gửi bởi nobita2008 trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 04-04-2009, 12:05 AM
  5. Bài toán tháp Hanoi với trạng thái ban đầu ngẫu nhiên
    Gửi bởi messi 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: 02-03-2008, 10:56 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