Я пытаюсь написать программу, которая принимает «слово» от пользователя и выводит его лексикографический ранг среди всех его перестановок. У меня есть функции для получения ранга и вычисления факториалов (итеративно из соображений сложности), но мне нужен основной метод, чтобы протестировать программу и сделать ее работоспособной. Вот что у меня есть до сих пор:
EDIT: я пытаюсь преобразовать эту программу C, который правильно делает вышеперечисленное в Java. У меня возникли проблемы в основном с функциями увеличения и обновления счетчика, получающими ошибку:The type of expression must be an array type but i resolved to int/String.
package ranking;
public class Ranking {
public static void increaseCount (int count, String str) {
int i;
for (i=0; str[i]; i++)
count[str[i]]++;
for (i=1; i < 256; i++)
count[i] += count[i-1];
}
public static void updateCount (int count, String ch){
int i;
for (i=ch; i < 256; i++)
count[i]--;
}
public static int findRank (String str) {
int length = str.length();
int mul = fact(length);
int rank = 1, i;
int count[256] = {0};
increaseCount(count, str);
for (i=0; i < length; i++) {
mul/= length - i;
rank += count [ str[i] - 1] * mul;
updateCount(count, str[i];)
}
return rank;
}
public static int factorial (int n){
int fact = 1;
if (n ==0 || n==1) {
return 1;
}
else {
for (int i=1; i<=n; i++){
fact *= i;
}
}
return fact;
}
public static void main (String[] args){
String str = "string";
System.out.print(findRank(str));
}
}