#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; // все слова печатаем с новой строки}}}