30/09/2018, 19:16

Mảng 2 chiều ( ma trận) C/C++

mọi người cho em hỏi, làm sao nhập n=4 mà xuất đc ma trận như vậy thế?
1 8 9 16
2 7 10 15
3 6 11 14
4 5 12 13

Demons Doan. viết 21:29 ngày 30/09/2018

dùng mảng 2 chiều đó bạn số dòng bằng số cột =4

Minh Anh viết 21:30 ngày 30/09/2018

có thể là mảng hai chiều của bạn là a[n][n] thì khi bạn nhập n=4 sẽ được 1 ma trận vuông cấp 4 , còn mấy cái giá trị của ma trận kia là bạn phải nhập vào thì mới có chứ làm sao mà nhập mỗi n=4 không thôi mà lại ra cả “cái cục” kia được

X Quochunghero viết 21:25 ngày 30/09/2018

Bài tập bắt làm vậy, chứ mình cg nghĩ như bạn, cục kia có qui luật đó, mình k làm đc

Minh Anh viết 21:27 ngày 30/09/2018

Bài tập bắt làm vậy, chứ mình cg nghĩ như bạn, cục kia có qui luật đó, mình k làm đc

bạn có thể nói rõ hơn về bài tập của bạn đc k ? đề bài như thế nào ?

X Quochunghero viết 21:26 ngày 30/09/2018

Cái cục kia có qui luật đó

Gió viết 21:27 ngày 30/09/2018

Bài này có quy luật mà


#include <stdio.h>

int main(void) {
    int n=5;
    int i,j;
    for(j=1;j<=n;j++){
        int first=j;
        for(i=1;i<=n;i++){
            printf("%3d ",first+i/2*2*n-(2*j-1)*(1-i%2));
        }
        puts("");
    }
    return 0;
}


X Quochunghero viết 21:28 ngày 30/09/2018

Thông não mình hộ bài này với :vgrinning:

Minh Anh viết 21:16 ngày 30/09/2018

mình nghĩ là quy luật của ma trận trên là giá trị tăng dần (thêm 1 đơn vị) theo cột: a[1][1]=1 , a[2][1]=2 , a[3][1]=3,… -> a[i+1][j]=a[i][j] +1 (i là hàng, j là cột)
=> bạn cần dùng hàm for để in ra các giá trị trên
p/s : còn việc in ra ma trận trên mình nghĩ chỉ cần đổi lại 1 chút so với việc in ra ma trận bình thường
VD:

  • ma trận thường:
for(i=1;i<=n;i++);
{
      for(j=1;j<=n;j++)
{ 
Câu lệnh ....
}
  • ma trận theo đề bài :
for(j=1;i<=n;i++);
{
 for(i=1;j<=n;j++)
{ 
Câu lệnh ....
}
}
X Quochunghero viết 21:20 ngày 30/09/2018

Full code cho minh xem với

Minh Anh viết 21:19 ngày 30/09/2018

Hờ hờ xin lỗi bạn, mình nghĩ sai thuật toán mất r , nó k dễ như mình nghĩ

Nguyễn Phú Kế viết 21:24 ngày 30/09/2018
for (int i = 0, count = 1; i < n; i++)
{
	if (i % 2 == 0)
	    for (int j = 0; j < n; j++, count++)
		a[j][i] = count;
	else
	    for (int j = n - 1; j >= 0; j--, count++)
		a[j][i] = count;
}

Bạn thử hướng này xem sao

X Quochunghero viết 21:20 ngày 30/09/2018

Chạy đúng rồi, thanks NPK

Minh Anh viết 21:23 ngày 30/09/2018
for (int i = 0, count = 1; i &lt; n; i++)
{
	if (i % 2 == 0)
	    for (int j = 0; j &lt; n; j++, count++)
		a[j][i] = count;
	else
	    for (int j = n - 1; j &gt;= 0; j--, count++)
		a[j][i] = count;
}

Bạn @NPK mình hỏi 1 tẹo được không ? nếu như theo qui luật đề bài là cột lẻ thì tăng từ trên xuống, cột chẵn thì tăng từ dưới lên thì mình nghĩ điều kiện của bạn bị ngược thì phải

Nguyễn Phú Kế viết 21:29 ngày 30/09/2018

nếu như theo qui luật đề bài là cột lẻ thì tăng từ trên xuống, cột chẵn thì tăng từ dưới lên thì mình nghĩ điều kiện của bạn bị ngược thì phải

Tại ở đây cột đầu tiên của mình là cột 0 (cột chẵn) chứ không phải bắt đầu là cột 1. Không biết có đúng ý bạn thắc mắc không?

Minh Anh viết 21:20 ngày 30/09/2018

À nếu là phần cột bắt đầu từ 0 thì đúng r

Bài liên quan
0