所以我尝试了这个在线挑战,但得到了运行时错误。请帮忙。我是编程新手。我附上了问题陈述和我的解决方案。
挑战使用Java语言,让函数KaprekarsConstant(num)
取一个四位数的整数(至少有两位是不同的),并对该数字执行以下例程:
注:在6174上表演例行公事总是会给你6174 (7641 - 1467 = 6174)。
例如:如果num
为3524
则程序应返回3
:(通过1)5432-2345=3087,(通过2)8730-0378=8352,(通过3)8532-2358=6174。
以下是我的解决方案:
import java.util.*;
import java.io.*;
class Main {
public static int KaprekarsConstant(int num) {
int diff = 0, count = 0;
while (diff != 6174) {
String s1 = String.valueOf(num);
int[] ch1 = new int[s1.length()];
for (int i = 0; i < ch1.length; i++) {
ch1[i] = s1.charAt(i);
}
Arrays.sort(ch1);
String s2 = String.valueOf(ch1);
String s3 = "";
for (int j = s2.length() - 1; j >= 0; j++) {
s3 += s2.charAt(j);
}
int a = Integer.parseInt(s2);
int b = Integer.parseInt(s3);
if (a > b) {
diff = a - b;
} else if (b > a) {
diff = b - a;
} else {
System.out.println("goal cant be reached");
break;
}
count++;
num = diff;
}
return num;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print(KaprekarsConstant(s.nextLine()));
}
}
此解决方案的代码行较少:
import static java.lang.System.out;
import java.util.Arrays;
/**
* @see https://en.wikipedia.org/wiki/6174_%28number%29
*/
public class KaprekarConstant {
public static void main(String[] args) {
assert(count(3524) == 3);
assert(count(3087) == 2);
assert(count(8352) == 1);
assert(count(6174) == 1);
out.println("All passed.");
}
public static int count(int start) {
int ct = 0;
do {
start = calc(start);
ct++;
} while (start != 6174);
return ct;
}
static int calc(int n) {
String n1s = String.format("%04d", n);
char[] chs = n1s.toCharArray();
Arrays.sort(chs);
n1s = new String(chs);
String n2s = new StringBuilder(new String(n1s)).reverse().toString();
int n1 = Integer.parseInt(n1s);
int n2 = Integer.parseInt(n2s);
return Math.max(n1, n2) - Math.min(n1, n2);
}
}
下面是一个Python实现:
def kc_count(start_int):
def kc_calc(n):
ns1 = ''.join(sorted("%04d" % n))
ns2 = ns1[::-1]
return max(int(ns1), int(ns2)) - min(int(ns1), int(ns2))
ct = 0;
while True:
start_int = kc_calc(start_int)
ct += 1
if start_int == 6174:
break
return ct
assert(kc_count(3524) == 3)
assert(kc_count(3087) == 2)
assert(kc_count(8352) == 1)
assert(kc_count(6174) == 1)
有一些基本的语法
import java.util.*;
import java.io.*;
public class Main {
public static int KaprekarsConstant(int num) {
int diff = 0, count = 0;
while (diff != 6174) {
String s1 = String.valueOf(num);
char[] ch1 = new char[s1.length()];
for (int i = 0; i < ch1.length; i++) {
ch1[i] = s1.charAt(i);
}
Arrays.sort(ch1);
String s2 = new String(ch1);
String s3 = "";
for (int j = s2.length() - 1; j >= 0; j--) {
s3 += s2.charAt(j);
}
int a = Integer.parseInt(s2);
int b = Integer.parseInt(s3);
if (a > b) {
diff = a - b;
} else if (b > a) {
diff = b - a;
} else {
System.out.println("goal cant be reached");
break;
}
count++;
num = diff;
}
return count;
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print(KaprekarsConstant(s.nextInt()));
}
}
请尝试以下代码:
/**
* KaprekarConstant
*/
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.Arrays;
import java.util.Collections;
public class KaprekarConstant {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int inputNumber;
char[] digits;
System.out.print("Enter four digit number: ");
try {
inputNumber = scan.nextInt();
if (checkLength(inputNumber))
throw new Exception();
Kaprekar(inputNumber);
} catch (InputMismatchException e) {
System.out.println("Not a number");
} catch (Exception ex) {
System.out.println("Number must have four digits");
} finally {
scan.close();
}
}
public static void Kaprekar(int target) {
int maximum = 0, minimum = 0, result = 0;
Integer[] digits = new Integer[4];
if (target == 6174)
return;
int i = 0;
while (i < 4) {
digits[i] = target % 10;
target /= 10;
i++;
}
Arrays.sort(digits);
minimum = toInt(digits);
Arrays.sort(digits, Collections.reverseOrder());
maximum = toInt(digits);
result = maximum - minimum;
System.out.println(String.format("%d - %d = %d", maximum, minimum, result));
Kaprekar(result);
}
public static boolean checkLength(int number) {
if (String.valueOf(number).length() < 5 && String.valueOf(number).length() > 3)
return false;
return true;
}
public static int toInt(Integer[] digits) {
int number = 0;
for (int digit : digits) {
number *= 10;
number += digit;
}
return number;
}
}
我认为这是找到卡佩卡常数的最好方法。
我已经花了几个小时试图找到使用Selenium WebDriver查找元素的方法。我假设我需要使用driver.find元素(By.xpath ("")), 但我不太确定如何使用。 我需要找到并单击“clickon”元素。问题是该元素的一部分正在更改(请参见屏幕截图),我需要从文件中提取并放入xpath。 我将感谢任何帮助。
我是这个MapReduce的新手,不知道如何做到这一点。 这也是我的文本文件的样子: tab/hdhd/hip/home.slkj.skjdh.dgsyququ/djkdjj.****文本不是创建的**我必须搜索出现的特定文本。
问题内容: 我有一个具有以下结构的行表,其中每一行都有每个人喜欢的颜色和该人所属组的列表。我如何返回每个组中最常见的颜色的列表? 您可以组合设置重叠,获取交点然后进行其他计数和排名吗? 问题答案: 快速而肮脏: 一个更好 [`LATERAL JOIN`](http://www.postgresql.org/docs/current/interactive/sql-select.html) 在Pos
问题内容: 假设有一个名为Type的简单枚举定义如下: 找到具有给定值的正确枚举通常是通过带for循环的静态方法(假设该方法在枚举内部定义)完成的,例如: 我认为用Stream API表示的功能等效如下: 我们怎么能写得更好,更简单?这段代码让人感觉很强迫,而且不太清楚。该特别是似乎笨重和滥用,因为它不累积什么,不进行计算,并始终直接返回(提供过滤器返回一个值- 如果不说的显然是个灾难),更何况是
问题内容: 我们正在做一个用Java编码的项目(针对JRE 1.6编译),并且需要一些小但显然复杂的功能的帮助:我们想在连接特定的无线网络时执行某些操作,例如,当连接的SSID ==“ myNetworkAtHome时”或类似内容。 在浏览了该站点,谷歌和Java文档之后,我们更加接近了。在此处查看代码后:http : //download.oracle.com/javase/tutorial/n
问题内容: 我有以下内容…我不会说问题,而是情况。 我有一些带有标签和其他内容的HTML。我想搜索每个URL的HTML。我现在正在通过检查它说“ h”,“ t”,“ t”然后“ p”的位置来做到这一点,但是我认为这不是一个很好的解决方案 有什么好主意吗? 补充:我正在寻找某种伪代码,但是,以防万一,我正在为此项目使用Java 问题答案: 尝试使用HTML解析库,然后在HTML文档中搜索标签。 并非