Aramis
03.10.2005, 11:25
Количество одинаковых элементов массива
Здравствуйте,
никак не могу разобраться с этой задачей:
необходимо посчитать количество одинаковых элементов в массиве.
те есть массив, например:
@dot=qw(1 2 3 6 7 2 1 1 2 6 1);
необходимо вывести такую статистику:
единиц - 4 штуки,
двоек - 3 штуки и тп
при этом надо учесть, что сам массив произвольного размера и количество повторяющихся элементов неизвестно.
Единственно что пришло в голову - скопировать массив и сравнивать каждый элемент массива со всеми элементами его копии. Но этот вариант крайне ресурсоёмкий. Наверняка есть какое-то более простое решение.
Специалисты, помогите пожалуйста.
Спасибо большое заранее.
Здравствуйте,
никак не могу разобраться с этой задачей:
необходимо посчитать количество одинаковых элементов в массиве.
те есть массив, например:
@dot=qw(1 2 3 6 7 2 1 1 2 6 1);
необходимо вывести такую статистику:
единиц - 4 штуки,
двоек - 3 штуки и тп
при этом надо учесть, что сам массив произвольного размера и количество повторяющихся элементов неизвестно.
Единственно что пришло в голову - скопировать массив и сравнивать каждый элемент массива со всеми элементами его копии. Но этот вариант крайне ресурсоёмкий. Наверняка есть какое-то более простое решение.
Специалисты, помогите пожалуйста.
Спасибо большое заранее.
3D Bob
03.10.2005, 12:47
Я очень давно изучал Перл, и его уже мало помню и мало того у меня нету сейчас его интерпретатора.
Но на сях я бы сделал так. Более опитмального и лучшего способа это сделать, я не вижу.
#pragma hdrstop
#include <iostream.h>
#include <vector.h>
//---------------------------------------------------------------------------
struct tabl{
char simbol;
int cout;
};
#pragma argsused
int main(int argc, char* argv[])
{
char st[] = "aaalkjasdhkwebsdfl;j";
vector<tabl> t;
for (int i=0; i<sizeof(st); i++){
bool z = false;
for (unsigned int j=0; j<t.size(); j++)
if (t[j].simbol == st[i]){
t[j].cout++;
z = true;
}
if (!z){
tabl s = {st[i],1};
t.push_back(s);
}
}
for (unsigned int j=0; j<t.size(); j++)
cout << t[j].simbol << "-" << t[j].cout << endl;
cin >> "";
return 0;
}
Но на сях я бы сделал так. Более опитмального и лучшего способа это сделать, я не вижу.
#pragma hdrstop
#include <iostream.h>
#include <vector.h>
//---------------------------------------------------------------------------
struct tabl{
char simbol;
int cout;
};
#pragma argsused
int main(int argc, char* argv[])
{
char st[] = "aaalkjasdhkwebsdfl;j";
vector<tabl> t;
for (int i=0; i<sizeof(st); i++){
bool z = false;
for (unsigned int j=0; j<t.size(); j++)
if (t[j].simbol == st[i]){
t[j].cout++;
z = true;
}
if (!z){
tabl s = {st[i],1};
t.push_back(s);
}
}
for (unsigned int j=0; j<t.size(); j++)
cout << t[j].simbol << "-" << t[j].cout << endl;
cin >> "";
return 0;
}
squirL
04.10.2005, 15:06
все проще гораздо...
#!/usr/bin/perl
@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);
foreach $element (@array)
{
$hash{$element}++;
}
foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}
3D Bob
улыбнул...
#!/usr/bin/perl
@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);
foreach $element (@array)
{
$hash{$element}++;
}
foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}
3D Bob
улыбнул...
Aramis
04.10.2005, 17:02
Many thanx всем,
всё работает :-)
а вот ещё один вариант подсказали:
my @dot=qw(1 2 3 6 7 2 1 1 2 6 1);
my %hash;
$hash{$_}++ for @dot;
print "$_ => $hash{$_}\n" for sort keys %hash;
всё работает :-)
а вот ещё один вариант подсказали:
my @dot=qw(1 2 3 6 7 2 1 1 2 6 1);
my %hash;
$hash{$_}++ for @dot;
print "$_ => $hash{$_}\n" for sort keys %hash;
3D Bob
04.10.2005, 19:11
Originally posted by squirL
все проще гораздо...
#!/usr/bin/perl
@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);
foreach $element (@array)
{
$hash{$element}++;
}
foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}
3D Bob
улыбнул...
Да этот способ мне знаком. Но я его проигнорил.
Почему улыбнул?? Ты в курсе что что
$hash{$element}++;
В своем внутреннем алгоритме выполняет тоже самое что и мой код?
все проще гораздо...
#!/usr/bin/perl
@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);
foreach $element (@array)
{
$hash{$element}++;
}
foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}
3D Bob
улыбнул...
Да этот способ мне знаком. Но я его проигнорил.
Почему улыбнул?? Ты в курсе что что
$hash{$element}++;
В своем внутреннем алгоритме выполняет тоже самое что и мой код?
squirL
04.10.2005, 22:45
Originally posted by 3D Bob
Да этот способ мне знаком. Но я его проигнорил.
Почему улыбнул?? Ты в курсе что что
$hash{$element}++;
В своем внутреннем алгоритме выполняет тоже самое что и мой код?
да. правда насчет "тоже самое" не уверен. не видел реализации :)
что улыбнуло? не обижайся, но зачем на просьбу написать перловый код давать реализацию на С++? чтобы автор "переводом" занимался?
Да этот способ мне знаком. Но я его проигнорил.
Почему улыбнул?? Ты в курсе что что
$hash{$element}++;
В своем внутреннем алгоритме выполняет тоже самое что и мой код?
да. правда насчет "тоже самое" не уверен. не видел реализации :)
что улыбнуло? не обижайся, но зачем на просьбу написать перловый код давать реализацию на С++? чтобы автор "переводом" занимался?
3D Bob
04.10.2005, 22:54
Originally posted by squirL
да. правда насчет "тоже самое" не уверен. не видел реализации :)
что улыбнуло? не обижайся, но зачем на просьбу написать перловый код давать реализацию на С++? чтобы автор "переводом" занимался?
Хотел показать алгоритм.
да. правда насчет "тоже самое" не уверен. не видел реализации :)
что улыбнуло? не обижайся, но зачем на просьбу написать перловый код давать реализацию на С++? чтобы автор "переводом" занимался?
Хотел показать алгоритм.
alex410
16.06.2009, 19:31
#!/usr/bin/perl
@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);
foreach $element (@array)
{
$hash{$element}++;
}
foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}
Может кто-нибудь перевести это в PHP
Спасибо большое заранее.
@array = qw(1 2 1 1 5 6 7 8 9 1 2 3);
foreach $element (@array)
{
$hash{$element}++;
}
foreach $element (sort keys(%hash))
{
print "$element = $hash{$element}\n";
}
Может кто-нибудь перевести это в PHP
Спасибо большое заранее.
k0t
17.06.2009, 13:18
Если максимально приближено к приведенному коду, то так:
<?php
$array = Array(1,2,1,1,5,6,7,8,9,1,2,3);
foreach ($array as $element)
{
$hash[$element]++;
}
ksort($hash);
foreach ($hash as $element => $count)
{
echo $element." = ".$count."\n";
}
?>
только интерпретатор закидает нотисами
<?php
$array = Array(1,2,1,1,5,6,7,8,9,1,2,3);
foreach ($array as $element)
{
$hash[$element]++;
}
ksort($hash);
foreach ($hash as $element => $count)
{
echo $element." = ".$count."\n";
}
?>
только интерпретатор закидает нотисами
alekciy
19.06.2009, 00:55
Хотел показать алгоритм.
Ты бы понял алгоритм, если ты тебе дали его словестное описание на японском (идише, латинском, etc)? Не думаю... тут так же.
Ты бы понял алгоритм, если ты тебе дали его словестное описание на японском (идише, латинском, etc)? Не думаю... тут так же.
Phodopus
19.06.2009, 11:31
Эу! Первые 7 постов от 2005 года :)
alekciy
19.06.2009, 15:52
Эу! Первые 7 постов от 2005 года :)
Блин, как-то не заметил...
"Твою ж мать!..." (с) Э. Картман
... чертовы некропостеры :mad:
Блин, как-то не заметил...
"Твою ж мать!..." (с) Э. Картман
... чертовы некропостеры :mad:
No comments:
Post a Comment