每日一题day07

    技术2024-10-25  19

    1.输入一个数n,然后输入n个数值各不相同,再输入一 个值x,输出这个值在这个数组中的下标(从0开始, 若不在数组中则输出-1)。

    import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String n = sc.nextLine();//输入第一个数 表示数字个数 n String[] nums = sc.nextLine().split(" ");//输入n个数字,空格分割 String x = sc.nextLine();//输入要找的数字 System.out.println(Arrays.asList(nums).indexOf(x)); } }

    2.链接:https://www.nowcoder.com/questionTerminal/66ca0e28f90c42a196afd78cc9c496ea 来源:牛客网

    原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。举例:一个ip地址为10.0.3.193每段数字 相对应的二进制数10 000010100 000000003 00000011193 11000001组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。

    的每段可以看成是一个0-255的整数,需要对IP地址进行校验

    输入描述

    输入 1 输入IP地址 2 输入10进制型的IP地址

    输出描述

    输出 1 输出转换成10进制的IP地址 2 输出转换后的IP地址

    import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ String ip = sc.nextLine(); //输入IP地址字符串 String ip10 = sc.nextLine();//输入10进制表示的IP地址字符串 System.out.println(convertIp10(ip));//IP地址转10进制字符串 System.out.println(convertIp(ip10));//10进制IP地址转IP地址 } } private static long convertIp10(String ip){ String[] ips = ip.split("\\.");//使用.分割 StringBuffer sb = new StringBuffer(); for(int i=0;i<ips.length;i++){ sb.append(binaryString(ips[i]));//10进制数转二进制字符串 } return Long.parseLong(sb.toString(),2); } private static String binaryString(String s){//十进制转换为8位二进制 StringBuffer sb = new StringBuffer(); int num = Integer.parseInt(s); int k = 1<<7; for(int i=0;i<8;i++){ int flag = (num&k)==0?0:1; sb.append(flag); num=num<<1; } return sb.toString(); } private static String convertIp(String ip10){ StringBuffer sb = new StringBuffer(); String ip2 = Long.toBinaryString(Long.parseLong(ip10));//长整型转二进制字符串(JDK Long的静态方法) String as = ""; if(ip2.length()<32){//不足32位前面补0 for(int i=0;i<32-ip2.length();i++){ as +="0"; } } ip2 = as+ip2; //IP地址每一段进行拼接 String[] ips = new String[4]; ips[0] = ip2.substring(0,8); ips[1] = ip2.substring(8,16); ips[2] = ip2.substring(16,24); ips[3] = ip2.substring(24); for(int i=0;i<4;i++){ sb.append(Integer.parseInt(ips[i],2)); if(i!=3){ sb.append("."); } } return sb.toString(); } } //

    请实现接口: unsigned int AddCandidate (char* pCandidateName);功能:设置候选人姓名输入: char* pCandidateName 候选人姓名输出:无返回:输入值非法返回0,已经添加过返回0 ,添加成功返回1

    Void Vote(char* pCandidateName);功能:投票输入: char* pCandidateName 候选人姓名输出:无返回:无

    unsigned int GetVoteResult (char* pCandidateName); 功能:获取候选人的票数。如果传入为空指针,返回无效的票数,同时说明本次投票活动结束,释放资源输入: char* pCandidateName 候选人姓名。当输入一个空指针时,返回无效的票数 输出:无返回:该候选人获取的票数

    void Clear() // 功能:清除投票结果,释放所有资源// 输入:// 输出:无// 返回

    import java.util.Scanner; import java.util.HashMap; import java.util.Set; public class Main{ public static void main(String args[]){ //控制台输入数据 Scanner in = new Scanner(System.in); while (in.hasNext()){ //候选人人数 int n = in.nextInt(); String[] s = new String[n]; //记录候选人 HashMap<String,Integer> hs = new HashMap<String,Integer>(); for(int i=0;i<n;i++){ String temp = in.next(); hs.put(temp,0); s[i] = temp; } //投票人数 int m = in.nextInt(); Set<String> keys = hs.keySet(); int cnt = 0; for(int i=0;i<m;i++){ //投票 String tick = in.next(); if(keys.contains(tick)){ hs.put(tick, hs.get(tick)+1); }else{ cnt++; } } //输出结果 for(String k:s){ System.out.println(k+" : "+hs.get(k)); } System.out.println("Invalid : "+cnt); } in.close(); } }

    4.链接:https://www.nowcoder.com/questionTerminal/00ffd656b9604d1998e966d555005a4b 来源:牛客网

    1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分) 2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字,如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分) 3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时,中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。

    /** * @program: 0703 * @description: * @author: Zhang lin * @create: 2020-07-03 23:03 **/ import java.util.Scanner; public class Main2{ //阿拉伯数字0-9对应的中文 static String[] map = {"壹","贰","叁","肆","伍","陆","柒","捌","玖"}; public static void main(String[] args){ Scanner scan = new Scanner(System.in); while(scan.hasNext()){ String number = scan.next(); resolve(number); } scan.close(); } public static void resolve(String str){ String[] strArr = str.split("\\."); //整数部分 int number = Integer.valueOf(str.split("\\.")[0]); StringBuffer res = new StringBuffer("人民币"); int yi = (int)(number/100000000); if(yi!=0){ res.append(resolveQian(yi)).append("亿"); number = number-yi*100000000; } int wan = (int)(number/10000); if(wan!=0){ res.append(resolveQian(wan)).append("万"); number = number-wan*10000; } //处理千百十个位 String beforePointString = resolveQian(number); if(beforePointString.length()>1){ res.append(beforePointString).append("元"); } //若有小数点,处理小数点后面位数 //小数部分处理 if(strArr.length>1){ String afterPointStr = strArr[1]; res.append(handleNumberAfterPoint(afterPointStr)); } //在resolveQian() 方法里可能会返回 零xxx //但在最高为不能有"零" String resString = res.toString(); if(resString.length()>4 && resString.charAt(3)=='零' && resString.charAt(4)!='元'){ //最高位的零去掉 resString = resString.substring(0,3)+resString.substring(4); } System.out.println(resString); } //处理4位数 千百十个位 public static String resolveQian(double temp){ StringBuffer resBuffer = new StringBuffer(); //千位 int qian = (int)(temp/1000); if(qian!=0){ resBuffer.append(map[qian-1]).append("仟"); temp = temp-qian*1000; } //百位 int bai = (int)(temp/100); if(bai!=0){ resBuffer.append(map[bai-1]).append("佰"); temp = temp-bai*100; } //注意:零 只会添加在 百位和十位 if(qian!=0 && bai==0){ resBuffer.append("零"); } //十位 int shi = (int)(temp/10); if(shi!=0){ if(shi!=1){ resBuffer.append(map[shi-1]); } resBuffer.append("拾"); temp = temp-shi*10; } //注意:0 if(bai!=0&&shi==0){ resBuffer.append("零"); } //个位 int ge = (int)(temp%10); if(ge!=0){ //5,0001 这种情况,千百十位均为0 if(qian==0&&bai==0&&shi==0){ resBuffer.append("零"); } resBuffer.append(map[ge-1]); } String res = resBuffer.toString(); return res; } //处理小数点后面的数 public static String handleNumberAfterPoint(String str){ String res = ""; if(str.equals("00") ||str.equals("0")){ res = "整"; }else{ if(str.charAt(0)!='0'){ res += map[Integer.valueOf(str.charAt(0)+"")-1]+"角"; } if(str.length()>1 && str.charAt(1)!='0'){ res += map[Integer.valueOf(str.charAt(1)+"")-1]+"分"; } } return res; } }
    Processed: 0.010, SQL: 9