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

来源:互联网 发布:客厅沙发颜色搭配 知乎 编辑:程序博客网 时间:2024/04/28 05:58

约德尔测试


兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。
说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个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();    }}
0 0
原创粉丝点击