n
e os elementos de uma matriz
inteira Anxn
e verifica se a
matriz A
tem uma linha,
coluna ou diagonal composta apenas por zeros.
Solução:
#include <stdio.h> #define LIM 200 int main(){ int A[LIM][LIM]; int n,i,j,lzeros,czeros,dpzeros,dszeros,zero; printf("Digite n: "); scanf("%d", &n); printf("Digite os elementos da matriz:\n"); for(i = 0; i < n; i++) for(j = 0; j < n; j++) scanf("%d", &A[i][j]); /*Verifica linhas:*/ lzeros = 0; for(i = 0; i < n; i++){ /*Verifica linha i:*/ zero = 1; for(j = 0; j < n; j++){ if(A[i][j] != 0){ zero = 0; break; } } if(zero){ lzeros = 1; break; } } /*Verifica colunas:*/ czeros = 0; for(j = 0; j < n; j++){ /*Verifica coluna j:*/ zero = 1; for(i = 0; i < n; i++){ if(A[i][j] != 0){ zero = 0; break; } } if(zero){ czeros = 1; break; } } /*Verifica diagonal principal:*/ dpzeros = 1; for(i = 0; i < n; i++){ if(A[i][i] != 0){ dpzeros = 0; break; } } /*Verifica diagonal secundária:*/ dszeros = 1; for(j = 0, i = n-1; j < n; j++, i--){ if(A[i][j] != 0){ dszeros = 0; break; } } if(lzeros) printf("Linha zerada\n"); if(czeros) printf("Coluna zerada\n"); if(dpzeros) printf("Diagonal principal zerada\n"); if(dszeros) printf("Diagonal secundária zerada\n"); return 0; }
Um jogo de palavras cruzadas pode ser representado por
uma matriz Amxn
onde cada posição da
matriz corresponde a um quadrado do jogo, sendo que 0
indica um quadrado branco e -1 indica um
quadrado preto. Indicar na matriz as posições que
são início de palavras horizontais e/ou verticais nos
quadrados correspondentes (substituindo os zeros),
considerando que uma palavra deve ter pelo menos
duas letras. Para isso, numere consecutivamente tais posições.
Exemplo: Dada a matriz:
0 | -1 | 0 | -1 | -1 | 0 | -1 | 0 |
0 | 0 | 0 | 0 | -1 | 0 | 0 | 0 |
0 | 0 | -1 | -1 | 0 | 0 | -1 | 0 |
-1 | 0 | 0 | 0 | 0 | -1 | 0 | 0 |
0 | 0 | -1 | 0 | 0 | 0 | -1 | -1 |
A saída deverá ser:
1 | -1 | 2 | -1 | -1 | 3 | -1 | 4 |
5 | 6 | 0 | 0 | -1 | 7 | 0 | 0 |
8 | 0 | -1 | -1 | 9 | 0 | -1 | 0 |
-1 | 10 | 0 | 11 | 0 | -1 | 12 | 0 |
13 | 0 | -1 | 14 | 0 | 0 | -1 | -1 |
Solução:
#include <stdio.h> #define LIM 100 int main(){ int A[LIM][LIM]; int m,n,i,j; int rotulo = 1, inic = 0; /*Lê matriz*/ printf("Entre com m e n: "); scanf("%d %d",&m, &n); printf("Entre com os elementos:\n"); for(i = 0; i < m; i++){ for(j = 0; j < n; j++){ scanf("%d", &A[i][j]); } } for(i = 0; i < m; i++){ for(j = 0; j < n; j++){ inic = 0; /*Testa início de palavras horizontais:*/ if(A[i][j] == 0){ if(j == 0){ if(A[i][1] != -1) inic = 1; } else if(A[i][j-1] == -1 && j < n-1){ if(A[i][j+1] != -1) inic = 1; } } /*Testa início de palavras verticais:*/ if(A[i][j] == 0){ if(i == 0){ if(A[1][j] != -1) inic = 1; } else if(A[i-1][j] == -1 && i < m-1){ if(A[i+1][j] != -1) inic = 1; } } if(inic == 1){ A[i][j] = rotulo; rotulo++; } } } /*Imprime matriz:*/ for(i = 0; i < m; i++){ for(j = 0; j < n; j++){ printf("%3d ", A[i][j]); } printf("\n"); } return 0; }