用java编写约瑟夫环问题,对一段英语语句进行加密与解密。(解密选做) 例如:I love China n=12,m=4, 加密后为:oCaviln eh I,解密后为:I love China
时间: 2024-09-06 15:06:46 浏览: 64
java解决约瑟夫环问题
在Java中,我们可以编写一个简单的程序来解决约瑟夫环问题(Josephus Problem)。这是一个经典的数学问题,描述的是在一个固定的循环中,每过m步数的人会被淘汰,直到剩下最后一个人。对于给定的n个人和步数m,我们需要找出第n个人的位置。
下面是约瑟夫环问题的Java实现:
```java
public class Josephus {
public static int josephus(int n, int m) {
if (m > n) {
throw new IllegalArgumentException("m cannot be greater than n");
}
// 经典的模运算求解,从1开始,n作为初始位置
return (n - 1) % m + 1;
}
public static void main(String[] args) {
int n = 12; // 人数
int m = 4; // 步数
System.out.println("In the Josephus game, person " + josephus(n, m) + " is eliminated.");
}
}
```
至于英文语句的Caesar Cipher(凯撒密码)加密和解密,这是一种替换加密,其中每个字母按照字母表向前移动固定数量的位置。假设我们仅考虑大写字母,并使用m=4作为偏移量:
加密部分:
```java
public String encryptCaesar(String text, int shift) {
StringBuilder encryptedText = new StringBuilder();
for (char c : text.toUpperCase().chars()) {
if (Character.isLetter(c)) {
char encryptedChar = (c + shift - 'A') % 26 + 'A';
encryptedText.append(encryptedChar);
} else {
encryptedText.append(c);
}
}
return encryptedText.toString();
}
String original = "I love China";
int shift = 4;
String encrypted = encryptCaesar(original, shift);
System.out.println("Encrypted: " + encrypted);
```
解密部分(选做,略去具体内容,因为题目未明确是否需要提供解密函数):
```java
public String decryptCaesar(String encrypted, int shift) {
return encryptCaesar(encrypted, 26 - shift); // 因为加密时右移了shift,所以解密时左移26-shift
}
// 解密后的字符串会在这里生成
```
阅读全文