
靠谱的车
题目
小明打车,出租车司机不喜欢4,改装计费表,任何出现数据4就跳过,其余功能正常1. 23再多一块变252. 39再多一块变503. 399再多一块编程500小明利用编程识别问题,给出计费表的表面读数,返回实际费用输入描述:一个数据表示实际产生的费用示例1:输入5,输出4
参考
def charge(cost:String): Unit ={ var result:Int = 0 val len:Int = cost.length for (i<- 0 until len){ val siteNum:Int = cost.substring(i,i+1).toInt result += Math.pow(9,len-i-1).toInt*siteNum if(siteNum>4){ result-=Math.pow(9,len-i-1).toInt } } println(result) }
寻找相同子串
题目
给你两个字符串t和p,要求从t中找到一个和p相同的连续子串,并输出改子串第一个字符的下标输入:AVERDXIVYERDIANRDXI输出:4
参考
String str1 = "abc";String str2 = "123acbc456abc";int index = -1;for(int i = 0;i<=str2.length()-str1.length();i++) { if(str2.substring(i, str1.length()+i).equals(str1)) { index = i; break; }}System.out.println(str1+"在"+str2+"中第一次出现的位置是:"+index);
public class t { private static int find(char[] str1_sz, char[] str2_sz) { int index = -1; if (str1_sz.length <= str2_sz.length) { for (int i = 0; i < str1_sz.length; i++) { for (int j = 0; j < str2_sz.length; j++) { if (str1_sz[i] == str2_sz[j]) { for (int k = 0; k < str1_sz.length; k++) { if (k + 1 == str1_sz.length) { index = j + 1; } } } if (index != -1) break; } } } return index; } public static void main(String[] args) { String str1 = "abc"; String str2 = "123acbc456abc"; char[] str1_sz=str1.toCharArray(); char[] str2_sz=str2.toCharArray(); int index=0; if (str1.length()<=str2.length()) { index=find(str1_sz,str2_sz); }else { index=find(str2_sz,str1_sz); } System.out.println(str1+"在"+str2+"中第一次出现的位置是:"+index); }}
找终点
题目
给定一个正整数数组,设为nums,最大为100个成员,求从第一个成员开始,正好走到数组最后一个成员,锁使用最少的步骤数,要求: 1.第一步必须从第一个元素开始,切1<=第一步的步长<len/2 2.从第二步开始,只能以所有成员的数字走相应的步数,不能多不能少,如果目标不可达返回-1 3.只能向数组的尾部走,不能往回走输入描述:由正整数组成的数据,以空格分割,数组长度小于100输出描述:正整数,表示最少的步数,如果不存在输出-1示例:输入7 5 9 4 2 6 8 3 5 4 3 9输出 2
参考
public static void main(String[] args) { int[] nums = {7,5,9,4,2,6,8,3,5,4,3,9}; // 记录最少步数 int minCount = -1; for(int i = 1; i <= nums.length/2 ; i++){ // 不可达,返回-1 int len = test1( nums,i ); if( len != -1 ){ // 找最小 minCount = minCount == -1 ? len : Math.min(minCount, len); } } System.out.println(minCount);}//public static int test1(int[] nums,int start){ int i = start; int count = 0; for (; i<= nums.length ; i+=nums[i]){ count++; // 如果超过, 返回-1, 不可达 ( 因为从第一个开始,所需要走的长度-1 ) if( i>(nums.length-1) ) return -1; // 如果正好等于, 返回步数 ( 因为从第一个开始,所需要走的长度-1 ) if( i==(nums.length-1) ) return count; } return -1;}
春游名单
题目
输入姓名+工号,英文逗号分割输出工号中数字按照升序排序示例:输入:wr0068,lt01,qhy0027828,gh20425256,xj0033258,zmj00505562输出:lt01,wr0068,qhy0027828,xj0033258,zmj00505562,gh20425256
参考
public static void test2(){ String str = "wr0068,lt01,qhy0027828,gh20425256,xj0033258,zmj00505562"; // 切分 String[] split = str.split(","); // 冒泡排序 for(int i = 1 ;i<split.length ;i++) { boolean flag = true; for (int j = 0; j<split.length-i;j++) { int i1 = Integer.parseInt(replaceAllNotNumber(split[j])); int i2 = Integer.parseInt(replaceAllNotNumber(split[j+1])); if( i1 > i2) { String zj= split[j]; split[j]=split[j+1]; split[j+1]=zj; flag = false; } } if(flag) break; } // 打印出来 for(int i = 0;i<split.length;i++){ System.out.println(split[i]); }}public static String replaceAllNotNumber(String str){ StringBuffer result = new StringBuffer(); char[] chars = str.toCharArray(); for (char aChar : chars) { // 0-9 的 ASCII if(aChar >=48 && aChar <=57){ result.append(aChar); } } return result.toString();}
最大连续1的个数
题目
输入: [1,1,0,1,1,1]输出: 3解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3.注意:输入的数组只包含 0 和1。输入数组的长度是正整数,且不超过 10,000。思路
参考
public static void main(String[] args) { int[] nums = {1,1,0,1,1,1}; int len = 0; int maxLen = 0; for (int num : nums) { if (num == 1) len++; else len=0; if(len > maxLen) maxLen = len; } System.out.println(maxLen);}
数大雁
题目
一群大雁往南 飞,给定一个字符串记录地面上的游客听到的大雁叫声,请给出叫声最少由几只大雁发出。具体的:1.大雁发出的完整叫声为"quack",因为有多只大雁同一时间嘎嘎作响,所以字符串中可能会混合多个"quack"。2.大雁会依次完整发出"quack",即字符串中’q’ ,‘u’, ‘a’, ‘c’, ‘k’ 这5个字母按顺序完整存在才能计数为一只大雁。如果不完整或者没有按顺序则不予计数。3.如果字符串不是由’q’, ‘u’, ‘a’, ‘c’, ‘k’ 字符组合而成,或者没有找到一只大雁,请返回-1。输入:quackquack输出:1
参考
public static void test1(String str,String calls){ /* * str : 所有叫声 "ququackkack" * calls : 一只大雁叫声的顺序 "quack" * */ // 默认0只 int len = 0; // 第一个q出现位置, 作为开始位置, 前面的都没有q,不完整,忽略 int startIndex = str.indexOf(calls.substring(0,1)); // 最后一个k出现位置,作为结束位置, 后面的都没k,不完整,忽略 int endIndex = str.lastIndexOf(calls.substring(calls.length()-1)); // 取出要计算的字符串 char[] chars = str.substring(startIndex, endIndex+1).toCharArray(); List<String> goose = new ArrayList<>(); for (char aChar : chars) { // 取出当前叫声 String call = String.valueOf(aChar); // 取出叫声所在位置 int i = calls.indexOf(call); // 如果出现不应该出现的声音, 跳过 if( i == -1 ) continue; // 如果是第一声, 添加 if( i == 0 ) { goose.remove(calls.substring(calls.length()-1)); goose.add(call); continue; } // 如果是其他叫声 int count = goose.size(); goose.remove(calls.substring(i-1,i)); if (count-1 == goose.size()) goose.add(call); } // 统计有几只 for (String s : goose) { if(s.equals(calls.substring(calls.length()-1))) len++; } System.out.println( len == 0 ? -1 : len);}
int sta[5] = {}; int max = -1; int curmax = 0; int cur = 0; int curmin = 0; //string str = "acaacckquacquacquacquacquackkkkkquacquacquack"; //string str = "ququackkack"; string str = "quacquacquacquacquackkkquacquacquacquacquacquacquackkkkquacquacquack"; string calls = "quack"; for (string::iterator it = str.begin();it!=str.end();++it) { switch (*it) { case 'q': ++cur; if (curmax < cur) { ++curmin; curmax = cur; } ++sta[1]; break; case 'u': if (sta[1] > 0) { --sta[1]; ++sta[2]; } break; case 'a': if (sta[2] > 0) { --sta[2]; ++sta[3]; } break; case 'c': if (sta[3] > 0) { --sta[3]; ++sta[4]; } break; case 'k': if (sta[4] > 0) { --sta[4]; --cur; } if (curmin > cur) { curmin = cur; } break; default: break; } } if (curmax == 0) { max = -1; }else { max = curmax - curmin; } cout << max << endl;