Mình mới nhập môn có bài deadline về hàm lặp như thế này:
Làm sao để suất ra:
1 10 11 20 21
2 9 12 19 22
3 8 13 18 23
4 7 14 17 24
5 6 15 16 25
Từ facebook
Mình mới nhập môn có bài deadline về hàm lặp như thế này:
Làm sao để suất ra:
1 10 11 20 21
2 9 12 19 22
3 8 13 18 23
4 7 14 17 24
5 6 15 16 25
Từ facebook
#include <stdio.h>
#include <stdlib.h>
#define MAX 10
int chan(int n)
{
return n % 2 == 0;
}
int main()
{
int size = 5;
int arr[MAX][MAX] = {};
for(int cot = 0; cot < size; ++cot)
for(int hang = 0; hang < size; ++hang)
if (chan(cot))
arr[hang][cot] = hang + cot*size + 1;
else
arr[hang][cot] = (cot+1)*size - hang;
for(int hang = 0; hang < size; ++hang)
{
printf("\n");
for(int cot = 0; cot < size; ++cot)
printf("%3d ", arr[hang][cot]);
}
return 0;
}
Sửa biến size = 10 sẽ in ra được
1 20 21 40 41 60 61 80 81 100
2 19 22 39 42 59 62 79 82 99
3 18 23 38 43 58 63 78 83 98
4 17 24 37 44 57 64 77 84 97
5 16 25 36 45 56 65 76 85 96
6 15 26 35 46 55 66 75 86 95
7 14 27 34 47 54 67 74 87 94
8 13 28 33 48 53 68 73 88 93
9 12 29 32 49 52 69 72 89 92
10 11 30 31 50 51 70 71 90 91
hại não ghê

a thử mô tả thuật toán đi 
Duyệt cột > hàng
for(int cot = 0; cot < size; ++cot)
for(int hang = 0; hang < size; ++hang)
nếu cột chẵn (0, 2, 4, …)
thì arr[hang][cot] = hàng + cột * size + 1
nếu cột lẻ (1,3, 5, …)
thì arr[hang][cot] = (cột +1) * size - hàng
Anh nhìn vào cái đề thì anh thấy có sự liên quan như vậy thôi mà, em để ý thử đi.
1 20 21 40 41 60 61 80 81 100
2 19 22 39 42 59 62 79 82 99
3 18 23 38 43 58 63 78 83 98
4 17 24 37 44 57 64 77 84 97
5 16 25 36 45 56 65 76 85 96
6 15 26 35 46 55 66 75 86 95
7 14 27 34 47 54 67 74 87 94
8 13 28 33 48 53 68 73 88 93
9 12 29 32 49 52 69 72 89 92
10 11 30 31 50 51 70 71 90 91
1 a[0][0] 10 a[0][1] 11 a[0][2] 20 a[0][3] 21 a[0][4]
2 a[1][0] 9 a[1][1] 12 a[1][2] 19 a[1][3] 22 a[1][4]
3 a[2][0] 8 a[2][1] 13 a[2][2] 18 a[2][3] 23 a[2][4]
4 a[3][0] 7 a[3][1] 14 a[3][2] 17 a[3][3] 24 a[3][4]
5 a[4][0] 6 a[4][1] 15 a[4][2] 16 a[4][3] 25 a[4][4]
theo công thức của a Đạt ta sẽ cho for chạy từng cột chứ không phải chạy hàng ngang như thông thường.
Đối với cột là chẵn tính từ cột 0-> cột 4
ta có giá trị cột 4 (a[0][4] ) : 21 = (hàng,cột, size) thực hiện. 21 = 21 - 20 ( 4 *5 ) thấy có 4=cột và 5 bằng size thiếu 1 thì ta + thêm 1, thiếu hàng + hàng = 0 =>cột chẵn = cột * size + 1 + hang
Đối với cột là lẻ tính từ cột 0-> cột 3
ta có giá trị cột 3( a[0][3] ) : 20 = (hàng, cột, size) thực hiện 20 => trong phép tính cột chẵn ta thấy xuất hiện cột, size, phép nhân và số 1. tương tự ta có : cột lẻ = (cột size hàng 1 ) => 0 + 1-3-5 = 20 vậy
cột lẻ 20 = (1+3)*5 + 0 = (1+ số cột) *size + hàng
Tiếp theo là duyệt mảng lại lần cuối chèn khoảng trắng và xuống hàng!!!
suy nghĩ cả nửa tiếng mới hiệu cách nó chạy. Hại não
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?