Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- /*
- N = 5
- 5 6 7 8 9
- 4 19 18 17 10
- 3 20 25 16 11
- 2 21 24 15 12
- 1 22 23 14 13
- N = 7
- 7 8 9 10 11 12 13
- 6 29 28 27 26 25 14
- 5 30 39 40 41 24 15
- 4 31 38 49 42 23 16
- 3 32 37 48 43 22 17
- 2 33 36 47 44 21 18
- 1 34 35 46 45 20 19
- */
- void printm(int *matriks, int n)
- {
- int i, j;
- for (i=0; i<n; i++)
- {
- for (j=0; j<n; j++)
- {
- printf("%d\t", matriks[i*n + j]);
- }
- printf("\n");
- }
- printf("\n\n");
- }
- int main()
- {
- int n, i, j, k, dim, count, geser, batas;
- int *matriks;
- printf("Input: ");
- scanf("%d", &n);
- matriks = malloc(n*n*sizeof(int));
- for (i=0; i<n; i++)
- {
- for (j=0; j<n; j++)
- {
- matriks[i*n + j] = 0;
- }
- }
- i = n-1;
- j = 0;
- dim = n/2;
- geser = 1;
- batas = n;
- count = 0;
- printf("Output:\n");
- for (k=0; k<dim; k++)
- {
- for (; i >= k; i--) {
- matriks[i*n + j] = ++count;
- }
- i++;
- for (j += geser; j != batas; j += geser) {
- matriks[i*n + j] = ++count;
- }
- j -= geser;
- for (i++; i < n; i++) {
- matriks[i*n + j] = ++count;
- }
- i--;
- if (k%2==0) {
- geser = -1;
- batas = k;
- j--;
- } else {
- geser = 1;
- batas = n-k-1;
- j++;
- }
- }
- // If we still have leftover
- if (n % 2 == 1)
- {
- for (; i >= dim; i--)
- matriks[i*n + j] = ++count;
- }
- printm(matriks, n);
- free(matriks);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement