BG Development


  Reply to this topicStart new topicStart Poll

> Задача-амиране на броя числа с дублиращи се цифри
askopl
Публикувано на: 19-11-2019, 21:16
Quote Post



Име: Аско
Група: Потребител
Ранг: Новопостъпил

Мнения: 2
Регистриран на: 19.11.19



Трябва ми някакво решение на следната задача, на C++ или Java ...Ще съм много благодарен на всеки опитал се да помогне!

Напишете програма която прочита от стандартния вход броя N на естествени числа, които ще анализира. След това програмата трябва да прочете тези N числа и да отпечата на един ред на стандартния изход броя на тези от тях, които могат, чрез разместване на цифрите в записа им да се преобразуват в някое от другите прочетени числа

Пример:

Вход :6 25 21 10242 42210 52 24021

Изход 5

Ограничения 2 < N ≤ 106 ;

прочетените числа са по-малки от 264. Гарантирано е, че прочетените числа са различни.

Обяснение на примера Чрез разместване на цифрите на 25 може да се получи 52. Вярно е и обратното твърдение – чрез разместване на цифрите на 52 може да се получи 25. До тук две измежду прочетените числа отговарят на исканото условие. Подобни съображения са валидни и за трите петцифрени числа от прочетените. Или общо пет от прочетените числа отговарят на условието

PMEmail Poster
Top
DarkOne
Публикувано на: 19-11-2019, 21:36
Quote Post


Group Icon
Име: Александър Петков
Група: Администратор
Ранг: Почетен член

Мнения: 3451
Регистриран на: 30.01.04



CODE
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>

using namespace std;
      
int main()
{
      int n;
      cin >> n;

      vector<string> numbers;
      numbers.reserve(n);

      for (int i = 0; i < n; ++i)
      {
            string num;
            cin >> num;
            sort(num.begin(), num.end());
            numbers.push_back(num);
      }

      int count = 0;
      for (int i = 0; i < numbers.size(); ++i)
            for (int k = 0; k < numbers.size(); ++k)
                  if (i != k && numbers[i] == numbers[k])
                  {
                        ++count;
                        break;
                  }

      cout << count << endl;

      return 0;
}


--------------------
The man who learns only what others know
is as ignorant as if he learns nothing.
The treasures of knowledge are the most rare,
and guarded most harshly.
-- Chronicle of the First Age
PMICQ
Top
Feral
Публикувано на: 24-11-2019, 13:40
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 101
Регистриран на: 05.02.17



Абе DarkOne, тоя квадратичния цикъл оти ти е, като може да минеш далеч по-евтино

CODE

      unsigned n;
      std::cin >> n;

      std::map<std::uint64_t, unsigned> numbersWithCount;

      for (auto i = 0u; i < n; ++i)
      {
            std::string num;
            std::cin >> num;
            std::sort(num.begin(), num.end());
            numbersWithCount[std::stoull(num)] +=1u;
      }

      auto count = 0u;
      for (auto it : numbersWithCount)
      {
            if (it.second > 1)
            {
                  count += it.second;
            }
      }

      std::cout << count << std::endl;


Това мнение е било редактирано от Feral на 24-11-2019, 13:44


--------------------
PMEmail Poster
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2019 | BG Development | All Rights Reserved
RSS 2.0