(Джерело: http://www.olymp.vinnica.ua/index_ua.php?lng=ua&cid=99)
Задача. Петрик П'яточкін вишикував у рядок слоненят та рахує їх по кожному кольору окремо. Всього буває 8 кольорів слоненят. У рядок вишикувались N (10<N<999) слоненят. Скільки слоненят кожного кольору стоїть перед Петриком? Бажано їх порахувати пройшовши всього один раз перед строєм.
Технічні умови. Програма зчитує з клавіатури ціле число N - кількість слоненят, потім, через пропуск - N чисел від 1 до 8, якими ми пронумеровали кожен колір в тій послідовності, в якій вони потрапляли на очі Петрику від початку рядка. Програма виводить на екран в один рядок через пропуски пари цілих чисел, де перше число пари - колір, а друге - кількість слоненят такого кольору.
Приклад.
Введення>12 1 1 2 3 3 1 5 6 8 7 6 5
Виведення> 1 3 2 1 3 2 4 0 5 2 6 2 7 1 8 1
Розв'язання.
Використаємо для підрахунку слоників масив цілих чисел з восьми елементів. Ітий елемент масиву буде кількість слоників ітого кольору. Так як пам'ятати стрій слоників не потрібно, то будемо зчитувати по одному слонику і збільшувати на 1, елемент масиву з номером відповідного кольору.
Запишемо алгоритми мовами програмування.
Free Pascal:
Var N, K : 0..999;
Ks : Array [1..8] Of 0..999;
Begin
Read(N);
For N := 1 To N Do Begin
Read (K);
Inc(Ks[K]);
End;
For K := 1 To 8 Do
Write (K,' ',Ks[K],' ');
End.
C++:
#include <iostream>
using namespace std;
int main()
{
int n, k, c[]={0,0,0,0,0,0,0,0};
cin >> n;
for (int i=0; i<n; i++)
{
cin >> k;
c[k-1]++;
}
for (int i=0; i<8; i++)
cout << i+1 << ' ' << c[i] << ' ';
}
using namespace std;
int main()
{
int n, k, c[]={0,0,0,0,0,0,0,0};
cin >> n;
for (int i=0; i<n; i++)
{
cin >> k;
c[k-1]++;
}
for (int i=0; i<8; i++)
cout << i+1 << ' ' << c[i] << ' ';
}
Немає коментарів:
Дописати коментар