赛码网—在线编程(五)约德尔测试

来源:互联网 发布:电信网络诈骗犯罪 编辑:程序博客网 时间:2024/04/28 05:29

约德尔测试
题目描述

兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。
说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来越光明。
请问:相似率为多少?
这里写图片描述

解题思路:直接用java自带函数isLetterOrDigit判断一个字符是不是数字或字母,是就返回1,不是就返回0,然后一个for循环判断两个二进制字符串对应位置是否相同,相同就count+1,最后count除以数组长度即可。

import java.math.BigInteger;import java.text.NumberFormat;import java.util.Scanner;import static java.lang.Character.isLetterOrDigit;/** * Created by SX10100563 on 2016/11/23. * 赛码网,在线编程,“约德尔测试” */public class test5 {    public static void main(String[] args) {        Scanner input = new Scanner(System.in);        String str = input.nextLine();        String result = input.nextLine();        char[] str_char = str.toCharArray();        for (int i = 0; i < str_char.length; i++) {            if (isLetterOrDigit(str_char[i])) {                str_char[i] = '1';            } else {                str_char[i] = '0';            }        }        int count = 0;        for (int i = 0; i < result.length(); i++) {            String str1 = String.valueOf(str_char[i]);            String str2 = String.valueOf(result.charAt(i));//            System.out.print(str1 + "" + str2 + str1.equals(str2) + ".....");            if (str1.equals(str2)) {                count++;            }        }        double percent = (double)count / result.length();        NumberFormat nt = NumberFormat.getPercentInstance();        nt.setMinimumFractionDigits(2);        System.out.println(nt.format(percent));    }}
0 0