Informatică, întrebare adresată de Nyx, 9 ani în urmă

C++(varianta de rezolvare pentru incepatori)
In matricea cu m linii si n coloane sa se afle cate linii simetrice are, o linie fiind simetrica daca elementele egal departate de caepetele liniei respective sunt egale.
1 3 0 3 1 
5 9 1 9 5
4 9 7 3 2
Se va afisa : primele doua linii sunt simetrice

Răspunsuri la întrebare

Răspuns de AlexMihai97
6
#include<iostream>
using namespace std;
int main()
{
    int a[100][100],n,m,i,j,ok,k=0;
    cout<<"m="; cin>>m;
    cout<<"n="; cin>>n;
    for (i=1;i<=m;i++)
        for (j=1;j<=n;j++)
        {
            cout<<"a["<<i<<"]["<<j<<"]="; cin>>a[i][j];
        }            //pana aici avem declarare si citire
    for (i=1;i<=m;i++)
    {
        ok=1;
        for (j=1;j<=n;j++)
            if (a[i][j]!=a[i][n-j+1])
                ok=0;
        if (ok==1)
            k++;
    }
    cout<<"Sunt "<<k<<" linii simetrice.";
}

Rezolvarea merge pe urmatorul principiu: Luam fiecare linie la rand si presupunem ca este simentrica, initializand variabila ok cu 1. Daca gasim un caz in care un element nu este egal cu simentricul sau, vom initializa variabilaok cu 0. La final vom testa valoarea variabilei ok, daca aceasta este tot 1 atunci contorul k creste.
Pentru a compara doua elemente simentrice se va folosi relatia:
a[i][j]!=a[i][n-j+1]
-i-ul ramane deschimbat deoarece este vorba de aceeasi linie
elementul de pe pozitia j are simentricul pe pozitia n-j+1. Ex:
a[1][2]=3 (a[i][j])
a[1][5-2+1]=a[1][4]=3 ( a[i][n-j+1] -j-ul este tot 2)
Alte întrebări interesante