Отразить матрицу относительно средней линии

#include "stdafx.h"

#include <iostream>

#include <cmath>

#include <cstdlib>

#include <cstring>

#include <iomanip>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

const int N=100;

int a[N][N];

int n;

cin >> n;

// заполнение матрицы

for (int i=0; i<n; i++)

for (int j=0; j<n; j++)

a[i][j] = rand () % 100;

// печать матрицы

for (int i=0; i<n; i++)

{

for (int j=0; j<n; j++)

cout << setw(3) << a[i][j] << " ";

cout << endl;

}

for (int i=0; i<n; i++)

for (int j=0; j< n/2; j++)

swap (a[i][j], a[i][n-1-j]);

cout << endl;

for (int i=0; i<n; i++)

{ for (int j=0; j<n; j++)

cout << setw(3) << a[i][j] << " ";

cout << endl;

}

system("pause");

return 0;

}

Пример 1.

В квадратной матрице целых чисел найти строку с наибольшей суммой элементов.

 

Алгоритм:

Последовательно просматриваем строки и для каждой считаем её сумму. Если сумма какой-то строки больше эталона (МАХ), то запоминаем номер этой строки.Вначале в качестве эталона выбираем сумму элементов 1-й строки.

 

Программа:

# include <iostream>

# include <fstream>

using namespace std;

const int N = 10; // размер матрицы

int a [N][N]; // матрица

int max_row (); // функция возвращает номер найденной строки (прототип)

int main ()

{

ifstream (“input.txt”);

ofstream (“output.txt”);

for (int i=0; i < N; i++) // ввод матрицы – можно заполнять случайными

for (int j=0; j < N; j++) // числами

fin >> a [i][j];

fout << max_row (); // печать номера строки с максимальной суммой элементов

fin.close ();

fout.close ();

return 0;

}

int max_row ()

{

int max_sum = 0, row = 0; // максимальная сумма и номер соответствующей строки

for (int j=0; j < N; j++) // в начале это строка с номером 0

max_sum += a [0][j];

for (int i=1; i < N; i++) // поиск по другим строкам

{

int s = 0;

for (int j=0; j < N; j++) // вычисляем сумму очередной строки

s += a [i][j];

if (s > max_sum) max_sum = s, row = i; // нашли новую максимальную сумму

}

return row; // возвращаем найденный номер

}

Пример 2.

В символьной строке (тексте) найти и напечатать все слова, которые содержат ровно 2 латинские буквы.

Алгоритм:

По известной схеме последовательно выделяем слова из текста и для каждого из них считаем число латинских букв (прописных и строчных). Если латинских букв ровно 2, печатаем это слово.

Программа:

# include <iostream>

# include <fstream>

using namespace std;

const int N = 10000; // МАХ размер текста

char s [N]; // строка для текста

ofstream (“output.txt”);

void FindPrint (char *); // функция находит и печатает слова

int main ()

{

ifstream (“input.txt”);

fin.getline (s, N); // ввод текста

FindPrint (s);

fin.close ();

fout.close ();

return 0;

}

void FindPrint (char * s); // функция находит и печатает слова

{

for (int i=0; i < N; i++)

{

for (; i < N && s [i] == ‘ ‘; i++) // обойти пробелы перед словом

;

if (i >= N) break; // дошли до конца текста

int kol_lat = 0, beg_w = i; // запомнить начало слова

// считать количество латинских букв

for (; i < N && s [i]!= ‘ ‘; i++) // дойти до конца слова

if (s [i] >= ‘a’ && s [i] <= ‘z’ || s [i] >= ‘A’ && s [i] <= ‘Z’)

kol_lat++;

if (kol_lat == 2) // подходящее слово - печатаем

{

for (int j=beg_w; j < i; j++)

1fout << s [j];

fout << endl; // все слова печатаем с новой строки}}}

 

 


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: