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ế? :sob:
1 8 9 16
2 7 10 15
3 6 11 14
4 5 12 13

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

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 :smiley: , 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 :joy: :joy: :joy:

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 ? :smiley: đề bài như thế nào ?

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

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


#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;
}


1 Like

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

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 :smiley:
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 ....
}
}
1 Like

Full code cho minh xem với

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

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

2 Likes

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

Bạn @NPK mình hỏi 1 tẹo được không ? :smiley: 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 :sweat_smile:

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? :sweat_smile:

1 Like

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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?