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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Одномерный и двухмерный массив на С http://www.cyberforum.ru/cpp-beginners/thread275916.html
Зраствуйте помогите решить пожалуйста! 1.Дан одномерный массив В найти количество положительных элементов 2.Дан двухмерный массив В найти сумму отрицательных элементов находящиеся на главной...
C++ Я ничего не смыслю в программировании.Подскажите чего нибудь... Я ничего не смыслю в программировании.Хочу стать программистом.Подскажиье чего нибудь!!!!:read: http://www.cyberforum.ru/cpp-beginners/thread275903.html
C++ Ввод матриц из файла
Здравствуйте, задача стоит такая: Из файла ввести значения двух матриц: А из N* N элементов и B из M*М элементов. Определить: где: Y_A – значение, определяемое для массива А, ...
Комментарий к коду C++
Ребят,помогите кто нибудь вот программа: #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/thread275875.html
>c:\users\хоюшка\desktop\java\8083\matrix\stdafx.h(5) : fatal error C1014: слишком много включаемых файлов: глубина = 1024 что делать ??? Добавлено через 1 минуту...
C++ Работа с текстом в C++ Задание такое: Выдать на экран слово, соответствующее номеру, введенному с клавиатуры. Посчитать слова я смог, а вот как дальше.... #include "stdafx.h" #include <stdio.h> #include <string.h>... подробнее

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

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

13.04.2011, 20:14. Просмотров 1681. Ответов 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;
}
Что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru