Форум программистов, компьютерный форум CyberForum.ru

Следующая анаграмма строки в лексикографическом порядке - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Комментарий к коду http://www.cyberforum.ru/cpp-beginners/thread275877.html
Ребят,помогите кто нибудь вот программа: #include <iostream> using namespace std; void main() { int n; int factorial=1; cin>>n; if(n>12) return;
C++ Калькулятор разработать кулькулятор, выполняющий арифметические операции над римскими цифрами, обеспечивающий перевод из римской системы в десятичную систему счисления http://www.cyberforum.ru/cpp-beginners/thread275850.html
Масив на С C++
нада написать массив из чисел в котором будет считатся сума этих чисел
C++ Событие при ОТжатии клавиши
Всем привет,Хотел бы узнать какой функцией из WinApi или OpenGL можно сделать событие при ОТжатии клавиши? На счет WM_KEYUP компилятор говорит что нельзя ее как-то там представить,хотя код брал с мсдн,есть альтернативы?
C++ Побитовые операции http://www.cyberforum.ru/cpp-beginners/thread275422.html
1-программа #include <stdio.h> #include <windows.h> int main(void) { char g; /* ??? ????????? */ char s; /* ??????? ?????? */ char p; /* ??????? ????????? */ unsigned char n; /* ?????????? ???? */ unsigned int UnitStateWord; /* ????? ????????? */ /* ???? ????????? ?????? */
C++ Факториал Простите пожалуйста, я хотел спросить, как сделать программу которая вычисляет фактариал. Просто интересно, напишите если не сложно, пожалуйста. (Просто так напишу, может быть кто-нибуть забыл термин. Фактариал например 7,это значит что 7! = 1*2*3*4*5*6*7). подробнее

Показать сообщение отдельно
iama
1249 / 974 / 49
Регистрация: 30.07.2010
Сообщений: 5,297

Следующая анаграмма строки в лексикографическом порядке - C++

13.04.2011, 20:14. Просмотров 1639. Ответов 2
Метки (Все метки)

Условие
Для данного слова (последовательности строчных латинских букв) выведите следующее за ним (в лексикографическом порядке) слово, которое может быть получено из данного перестановкой букв (анаграмму). Если из данное слово уже является последним среди всех своих анаграмм, то необходимо вывести первую возможную (в лексикографическом порядке) анаграмму.
Формат входных данных
Задана последовательность слов, по одному слову в строке. Длина одного слова не превышает 50 символов.
Формат выходных данных
Необходимо вывести вывести результат для каждого полученного на вход слова.
Источник

Мое решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <vector>
 
using namespace std;
using std::string;
 
string next_lex(string s)
{
  if (s.length() < 2) return s;
 
  string r = "";
  int i = s.length() - 2;
 
  while (i >= 0 && s[i] >= s[i+1]) i--;
 
  if (i == -1)
    while (s.length()) {
      r += s[s.length() - 1];
      s.erase(s.length() - 1);
    }
  else
  {
    r = s.substr(0, i) + s[i+1];
    s = s[i] + s.substr(i + 2, s.length() - i - 2);
 
    for (int k = 0; k < s.length() - 1; k++)
      for (int l = k; l < s.length(); l++)
        if (s[k] > s[l])
        {
          char c = s[k];
          s[k] = s[l];
          s[l] = c;
        }
 
    r += s;
  }
 
  return r;
}
 
int main()
{
  string s; vector <string> a;
 
  while (!cin.eof()) { cin >> s; a.push_back(s); }
 
  for (int i = 0; i < a.size() - 1; i++)
    cout << next_lex(a[i]) << endl;
 
  return 0;
}
Что не так?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru