您的位置:首页 > 编程语言

赛码网:在线编程--约德尔测试

2017-04-25 20:01 204 查看

约德尔测试

兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。

说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来越光明。

请问:相似率为多少?



import java.text.DecimalFormat;
import java.util.*;

public class Yodel {
public static void main(String[] args) {
Scanner sin = new Scanner(System.in);
String yodelString = sin.nextLine();
String target = sin.nextLine();

String translatedString = translate(yodelString);
float compare = (float) compare(translatedString, target);
DecimalFormat format = new DecimalFormat("0.00");
String result = format.format(compare * 100);
System.out.println(result + "%");
}

/**
* 进行两个01串之间的比较
*/
private static double compare(String str1, String str2) {
char[] arr1 = str1.toCharArray();
char[] arr2 = str2.toCharArray();
int len = arr1.length;
System.out.println(len);
double count = 0;
for (int i = 0; i < len; i++) {
if (arr1[i] == arr2[i]) {
count++;
}
}
double rate = count / len;
return rate;

}

/**
* 从字符串到01串的转换
*/
private static String translate(String yodelString) {
if (yodelString.length() < 1 || yodelString.length() > 1000) {
return "";
}
char[] charArray = yodelString.toCharArray();
StringBuffer sb = new StringBuffer();
for (char c : charArray) {
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
sb.append("1");
} else {
sb.append("0");
}
}
return sb.toString();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  约德尔测试 编程