corwin233 level
获赞
0
粉丝
0
关注
0
看过 TA
0
门头沟学院
2025
Java
IP属地:湖南
暂未填写个人简介
私信
关注
01-02 15:21
门头沟学院 Java
输入字符串s,输出s中包含所有整数的最小和。说明:字符串s,只包含 a-z A-Z ± ;合法的整数包括1) 正整数 一个或者多个0-9组成,如 0 2 3 002 1022)负整数 负号 – 开头,数字部分由一个或者多个0-9组成,如 -0 -012 -23 -00023输入描述包含数字的字符串输出描述所有整数的最小和用例输入bb1234aa输出10说明无输入bb12-34aa输出-31说明1+2+(-34) = -31public static void answer() throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String s = bf.readLine();char[] charArr=s.toCharArray();int res=0;for (int i = 0; i < charArr.length; i++) {char c = charArr[i];// 1. 排除字母和加号if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || c == '+') {continue;}// 2. 处理减号(负数逻辑)if (c == '-') {// 只有后面紧跟数字才处理if (i + 1 < charArr.length && (charArr[i + 1] >= '0' && charArr[i + 1] <= '9')) {i++; // 确认是负数,指针后移StringBuilder sb = new StringBuilder("-");while (i < charArr.length && (charArr[i] >= '0' && charArr[i] <= '9')) {sb.append(charArr[i]);i++;}res += Integer.parseInt(sb.toString());i--; // 回退,抵消循环的i++}// 处理完或无效负号,都跳过,防止落入下方逻辑continue;}// 3. 剩下的必然是正整数的单个数字res += c - '0';}System.out.println(res);}
0 点赞 评论 收藏
分享
01-02 14:29
门头沟学院 Java
给定两个整数数组array1、array2,数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值注意:两对元素如果对应于array1、array2中的两个下标均相同,则视为同一对元素。输入描述:输入两行数组array1、array2,每行首个数字为数组大小size(0 < size <= 100);0 < array1[i] <= 10000 < array2[i] <= 1000接下来一行为正整数k0 < k <= array1.size() * array2.size()输出描述:满足要求的最小和示例1输入:3 1 1 23 1 2 32输出:4说明:用例中,需要取2对元素 取第一个数组第0个元素与第二个数组第0个元素组成1对元素[1,1]; 取第一个数组第1个元素与第二个数组第0个元素组成1对元素[1,1]; 求和为1+1+1+1=4,为满足要求的最小和public static void answer() throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String s = bf.readLine();String[] strArr1=s.split(" ");s=bf.readLine();String[] strArr2=s.split(" ");s=bf.readLine();int k=Integer.parseInt(s);int len1=Integer.parseInt(strArr1[0]);int len2=Integer.parseInt(strArr2[0]);int[] arr1= new int[len1];int[] arr2= new int[len2];for (int i = 0; i < len1; i++) {arr1[i]=Integer.parseInt(strArr1[i+1]);}for (int i = 0; i < len2; i++) {arr2[i]=Integer.parseInt(strArr2[i+1]);}//堆里数组格式{sun,index1,index2}PriorityQueue<int[]> pq=new PriorityQueue<>((a,b)->a[0]-b[0]);//维护一个最小堆,按和升序排列for (int i = 0; i < len1; i++) {pq.offer(new int[]{arr1[i]+arr2[0],i,0});//用arr1的每一个和arr2[0]相加初始化堆}int resSum=0;while (k>0&&!pq.isEmpty()){int[] current=pq.poll();int sum=current[0];int index1=current[1];int index2=current[2];resSum+=sum;k--;if(index2+1<len2){//如果还有元素没加入堆中pq.offer(new int[]{arr1[index1]+arr2[index2+1],index1,index2+1});//看是谁的下一个该入队了}}System.out.println(resSum);//        int[] res=new int[len1*len2];//        for (int i = 0; i < len1; i++) {//            for (int j = 0; j < len2; j++) {//                res[i*len2+j]=arr1[i]+arr2[j];//            }//        }//        Arrays.sort(res);//        int count=0;//        for (int i = 0; i < k; i++) {//            count+=res[i];//        }//        System.out.println(count);}
0 点赞 评论 收藏
分享
01-01 20:14
门头沟学院 Java
题目描述: 有一个数列a[N] (N=60),从a[0]开始,每一项都是一个数字。数列中a[n+1]都是a[n]的描述。其中a[0]=1。规则如下:a[0]:1a[1]:11(含义:其前一项a[0]=1是1个1,即“11”。表示a[0]从左到右,连续出现了1次“1”)a[2]:21(含义:其前一项a[1]=11,从左到右:是由两个1组成,即“21”。表示a[1]从左到右,连续出现了两次“1”)a[3]:1211(含义:其前一项a[2]=21,从左到右:是由一个2和一个1组成,即“1211”。表示a[2]从左到右,连续出现了1次“2”,然后又连续出现了1次“1”)a[4]:111221(含义:其前一项a[3]=1211,从左到右:是由一个1、一个2、两个1组成,即“111221”。表示a[3]从左到右,连续出现了1次“1”,连续出现了1次“2”,连续出现了两次“1”)请输出这个数列的第n项结果(a[n],0≤n≤59)。输入描述:数列的第n项(0≤n≤59):4输出描述:数列的内容:111221补充说明:示例1输入:4输出:111221public static void answer() throws IOException {BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));String s = bf.readLine();int max=Integer.parseInt(s);String pre="1";for (int i = 1; i < max+1; i++) {int left=0,right=0;int n=pre.length();StringBuilder sb=new StringBuilder();while (left<n){while((right<n)&&(pre.charAt(left)==pre.charAt(right))){right++;}sb.append(right-left).append(pre.charAt(left));left=right;}pre=sb.toString();}System.out.println(pre);}
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务