今天做到了VIP部分的题,感觉难度上和之前明显有一个小的跨越,目前卡在了第今天的第五题上,所以今天我只做了四道题,明天会补上第五题。其中有些题我参照了其他博友们的代码,感觉大神的代码真的很赞,自己还需努力啊~~好了废话不多说,开始今天的四道题:

【BASIC-16】 基础练习 分解质因数

问题描述
求出区间[a,b]中所有整数的质因数分解。
输入格式
输入两个整数a,b。
输出格式
每行输出一个数的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=2*2
5=5
6=2*3
7=7
8=2*2*2
9=3*3
10=2*5
提示
先筛出所有素数,然后再分解。
数据规模和约定
2<=a<=b<=10000

Code:

import java.util.Scanner ;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner( System.in ) ;int a= sc.nextInt() ;int b = sc.nextInt() ;int i = 2 ; // 考虑分解质因数时从而开始考虑String result = "" ;// 当起始为 1 时特殊考虑if( a == 1 ) {result += "1=1" ;a ++ ;}for( int k = a; k <= b; k ++ ) {   // k为被分解质因数result= k + "=" ;   // 存储分解表达式i = 2 ;      // 每次判断新的 k 要重置当前考虑的质因数int temp = k ;  // 充当 k 的替身,以免除 i 时修改了循环变量的值导致不断循环while(  i <= k ) { // 如果k能除开当前考虑的质因数if( temp % i == 0 ) {        // 这里偷了懒,本来应该是先构造[a,b]之间的质数表,然后让 i 从前往后取,但是这里没有,当 temp % 2 != 0 后,当判断 temp % 4 一定也不为0,所以这里可能会多几次循环,但却减少了构造质数表的时间result += i + "*" ;temp /= i ;}else {   // 如果k除不开当前考虑的质因数,则换下一位i ++ ;}}System.out.println( result.substring(0, result.length()-1) );   // 因为最后一位多保存了一位 '*' ,所以这里输出取个子串}}}

【BASIC-17】 基础练习 矩阵乘法

问题描述
给定一个N阶矩阵A,输出A的M次幂(M是非负整数)
  例如:
  A =
  1 2
  3 4
  A的2次幂
  7 10
  15 22
输入格式
第一行是一个正整数N、M(1<=N<=30, 0<=M<=5),表示矩阵A的阶数和要求的幂数
  接下来N行,每行N个绝对值不超过10的非负整数,描述矩阵A的值
输出格式
输出共N行,每行N个整数,表示A的M次幂所对应的矩阵。相邻的数之间用一个空格隔开
样例输入
2 2
1 2
3 4
样例输出
7 10
15 22

Code:

import java.util.Scanner ;public class Main {public static void matrix_multi ( long[][] A, long[][] B, long[][] result, int M, int N ) { // result 记录每次A*B的结果if( M < 2 ) return ;for( int i = 0; i < N; i ++ ) {        // i:表示 result 的行for( int j = 0; j < N; j ++ ) {   // j:表示 result 的列,对于A行数即是列数result[i][j] = 0 ;for( int k = 0; k < N; k ++ ) {   // k: 表示 A1 的列和 A2 的行result[i][j] += A[i][k] * B[k][j] ;}}}for( int i = 0; i < N; i++ )A[i] = result[i].clone() ;matrix_multi( A, B, result, M - 1, N ) ;}public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner( System.in ) ;int N = sc.nextInt() ; // 输入矩阵的阶数int M = sc.nextInt() ;   // 输入要求的幂数long[][] A = new long[N][N] ;long[][] result = new long[N][N] ;for( int i = 0; i < N; i ++ ) {for( int j = 0; j < N; j++ ) {A[i][j] = sc.nextInt() ;result[i][j] = 0 ;}}// 0次幂特殊处理if( M == 0 ) {for( int i = 0; i < N; i ++ ) {for( int j = 0; j < N; j++ ) {if( i == j )result[i][j] = 1 ;  elseresult[i][j] = 0 ;}}}// 1次幂直接赋值else if( M == 1 ) {for( int i = 0; i < N; i ++ ) {for( int j = 0; j < N; j++ ) {result[i][j] = A[i][j] ;}}}// 多次幂处理elsematrix_multi( A, A.clone(), result,  M, N ) ; // 注意:这里第二个参数一定要是A.clone(),因为否则在函数处理中A和B总是指向同一块栈空间for( int i = 0; i < N; i ++ ) {for( int j = 0; j < N; j++ ) {System.out.print( result[i][j] + " " );}System.out.println();}}}

【BASIC-18】 基础练习 矩形面积交

问题描述
平面上有两个矩形,它们的边平行于直角坐标系的X轴或Y轴。对于每个矩形,我们给出它的一对相对顶点的坐标,请你编程算出两个矩形的交的面积。
输入格式
输入仅包含两行,每行描述一个矩形。
  在每行中,给出矩形的一对相对顶点的坐标,每个点的坐标都用两个绝对值不超过10^7的实数表示。
输出格式
输出仅包含一个实数,为交的面积,保留到小数后两位。
样例输入
1 1 3 3
2 2 4 4
样例输出
1.00

Code:

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Scanner ;public class Main {// 求第二大public static double s_max( double x1, double x2, double x3, double x4 ) {double[] a = {x1, x2, x3, x4} ;Arrays.sort(a) ;return a[1] ;}// 求第二小public static double s_min( double x1, double x2, double x3, double x4 ) {double[] a = {x1, x2, x3, x4} ;Arrays.sort(a) ;return a[2] ;}public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner( System.in ) ;// 输入第一个矩形的左下点坐标double x1 = sc.nextDouble() ;double y1 = sc.nextDouble() ;// 输入第一个矩形的右上点坐标double x2 = sc.nextDouble() ;double y2 = sc.nextDouble() ;// 输入第二个矩形的右上点坐标double x3 = sc.nextDouble() ;double y3 = sc.nextDouble() ;// 输入第二个矩形的左下点坐标double x4 = sc.nextDouble() ;double y4 = sc.nextDouble() ;// 取绝对值x1 = Math.abs(x1) ;y1 = Math.abs(y1) ;x2 = Math.abs(x2) ;y2 = Math.abs(y2) ;x3 = Math.abs(x3) ;y3 = Math.abs(y3) ;x4 = Math.abs(x4) ;y4 = Math.abs(y4) ;// 格式控制NumberFormat formatter = new DecimalFormat( "#0.00" ) ;double result ;// 不相交if( Math.max(x1, x2) <=Math.min(x3, x4) ||Math.min(x1, x2) >= Math.max(x3, x4) || Math.min(y1, y2) >= Math.max(y3, y4) ||Math.max(y1, y2) <= Math.min(y3, y4) ) {result = 0.0 ;}// 相交,则等于中间两个点的坐标为对顶点的矩形面积else {result = Math.abs( (s_max(x1, x2, x3, x4) - s_min(x1, x2, x3, x4)) * (s_max(y1, y2, y3, y4) - (s_min(y1, y2, y3, y4) ))) ;}System.out.println( formatter.format(result) );}}

【BASIC-19】 基础练习 完美的代价

问题描述
回文串,是一种特殊的字符串,它从左往右读和从右往左读是一样的。小龙龙认为回文串才是完美的。现在给你一个串,它不一定是回文的,请你计算最少的交换次数使得该串变成一个完美的回文串。
  交换的定义是:交换两个相邻的字符
  例如mamad
  第一次交换 ad : mamda
  第二次交换 md : madma
  第三次交换 ma : madam (回文!完美!)
输入格式
第一行是一个整数N,表示接下来的字符串的长度(N <= 8000)
  第二行是一个字符串,长度为N.只包含小写字母
输出格式
如果可能,输出最少的交换次数。
  否则输出Impossible
样例输入
5
mamad
样例输出
3

【此题参考了其他博友的代码和思路,感谢“程序员编辑部”博主 ( http://blog.csdn.net/programmer_editor/article/details/1898387 ) 和“andywxy”博主 ( http://blog.csdn.net/andywxy/article/details/1904151 )的详解,我用java重写了“程序员编辑部”博主的代码,又加了些我的理解注释,代码如下:】

Code:

import java.util.Scanner ;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner sc = new Scanner( System.in ) ;int N = sc.nextInt() ;String str = sc.next() ;char[] ch = str.toCharArray() ;int[] alpha = new int[26] ;  // 记录字母出现的次数// 判断是否可能被转成回文串for( int i = 0; i <N; i ++ ) {alpha[ ch[i] - 'a' ] ++ ;}char charodd = ' '; // 记录可能的出现奇数次的字符int odd = 0 ;  // 统计alpha中有多少字母出现奇数次for( int i = 0; i < alpha.length; i ++ ) {if( alpha[i] % 2 != 0 ) {odd ++ ;charodd = (char) ('a' + i) ;   // 记录下出现奇数次的字符}}if( odd > 1 ) {      // 不可能转成回文串System.out.println( "Impossible" ) ;}else {int exchange = 0 ; // 记录交换次数for( int i = 0; i < N/2; i ++ ) {        // 先看左边的字符if( ch[i] == charodd ) {    // 如果出现奇数次的字符在串的左边int j = 0 ;for( j = i; j <= N-i-1; j ++ ) {   // 从当前位置开始向后找与该位置的镜像位置相同的字母,例如: [ d, m, a, m, a, m, m ]    从j = 0向后找与ch[N-i-1] (即'm') 相同的字母if( ch[j] == ch[N-i-1] ) break ;}exchange += j-i ; // 局部向后偏移的次数,即交换次数for( int k = j; k > i; k -- ) // 从当前位置开始到向后找到的第一个与 i 的镜像位置相同字母的位置处(包括该处)用前一个字符覆盖后一个字符    ch[k] = ch[k-1] ;ch[i] = ch[N-i-1] ;  // 之后用 i 的镜像位置的字符 填到 i 位置}else {    // 如果出现奇数次的字符不在串的左侧(或者不存在),则不用理他,因为当所有左侧字符都与右侧字符匹配好后,即使存在出现次数为奇数的字符,也会自动移动到中间位置int j = 0 ;for( j = N-i-1; j >= i; j -- ) {  // N-i-1是 i 在ch串中的镜像位置if( ch[j] == ch[i] )    // 从当前 i 的镜像位置向前找,找到第一个相同字符就退出(贪心策略),之所以不用向后找,因为后面的字符已经和前面的字符匹配好了break ;}exchange += N-i-1-j;  for( int k = j; k < N-i-1; k ++ )     // 从找到与 i 在串的镜像位置开始向前找到的第一个相同字母的位置起,到 i 的镜像位置(不包括镜像位置),用后一个字符覆盖前一个字符(即局部整体前移一位)ch[k] = ch[k+1] ;ch[N-i-1] = ch[i] ;    // 前移操作完后用 i 处的字符填到 i 的镜像位置处}}System.out.println( exchange );}}}

今天做题明显感到了有一点难度,希望自己能继续坚持下去~~,在这过程中肯定少不了参考很多其他朋友的思路和代码,每次我参考其他博主的博文我都会附上链接,在此再次谢谢大家智慧的分享~

【LQ系列】 BASIC-16~BASIC-19相关推荐

  1. visual basic.net 2019-Visual Basic 16.0新功能

    Visual Basic 16.0 Visual Basic 16.0 侧重于向 .NET Core 提供 Visual Basic 运行时 (microsoft.visualbasic.dll) 的 ...

  2. 微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)

    之前已经介绍过,如何使用百度地图api来获取地理位置信息 微信小程序的百度地图获取地理位置 -- 微信小程序教程系列(15) 下面介绍使用百度api来获取天气信息. 1> 第一步:先到百度开放平 ...

  3. STM32 基础系列教程 16 - I2S(模拟)

    前言 学习stm32 I2S接口使用,学会用I2S接口收发数据,学习I2S总线相关知识, I2S(Inter-IC Sound)总线, 又称 集成电路内置音频总线,是飞利浦公司为数字音频设备之间的音频 ...

  4. 算法细节系列(16):深度优先搜索

    算法细节系列(16):深度优先搜索 详细代码可以fork下Github上leetcode项目,不定期更新. 题目均摘自leetcode: 1. 329 Longest Increasing Path ...

  5. 【花雕动手做】有趣好玩的音乐可视化系列小项目(19)--通体光纤灯

    偶然心血来潮,想要做一个音乐可视化的系列专题.这个专题的难度有点高,涉及面也比较广泛,相关的FFT和FHT等算法也相当复杂,不过还是打算从最简单的开始,实际动手做做试验,耐心尝试一下各种方案,逐步积累 ...

  6. 【Unity3D 教程系列第 16 篇】Scene视图很清楚,但是Game视图却很模糊的解决方案

    这是[Unity3D 教程系列第 16 篇],如果觉得有用的话,欢迎关注专栏. 如果你用 Unity 时,Scene 视图上很清楚,但是 Game 视图却很模糊,恭喜你,你的问题即将被解决了,继续看- ...

  7. 【Mac 教程系列第 16 篇】如何查看 Apple 产品的真伪

    这是[Mac 教程系列第 16 篇],如果觉得有用的话,欢迎关注专栏. 如果你想验证 Apple 产品的真伪,就去看下你的产品是否享有 Apple 的售后保障即可. 在此之前,你需要先知道自己产品的序 ...

  8. 【go实战系列五】 go1.19.2与pkg中error如何wrap与unwrap Errors | 将error进行wrap向上处理思想 | pkg/errors

    历史go篇章 [go实战系列一]开篇:在循环中重新定义变量(redefining for loop variable semantics) [go实战系列二]关于切片的基本操作 copy sort a ...

  9. 【IDEA 教程系列第 16 篇】idea 打开终端 Terminal 的快捷键

    这是[IDEA 教程系列第 16 篇],如果觉得有用的话,欢迎关注专栏. 快捷键 Mac: Option + F12 Windows: Alt + F12 更多 idea 中的快捷键,推荐一篇博客 i ...

  10. 【Windows 问题系列第 16 篇】如何去除 Chrome 中的请停用以开发者模式运行的扩展程序

    这是[Windows 问题系列第 16 篇],如果觉得有用的话,欢迎关注专栏. 你是否遇到过这样的问题,每次登陆 Chrome 浏览器的时候,右上角总会弹出来下面这个界面 让你停用以开发者模式运行的扩 ...

最新文章

  1. FPGA在人工智能时代的独特优势
  2. Vijos 1100 (区间DP)
  3. Google存储海量私人信息 隐私问题不堪设想
  4. 表单流程中获取当前执行人填写的审批意见
  5. angular 解决闪烁问题_AngularJS页面访问时出现页面闪烁问题的解决
  6. OpenCV配置及开发中遇到的问题
  7. 强推WordPress里的一款代码高亮插件——EnlighterJS
  8. android 字体像素转换工具类_Android点9图机制及在聊天气泡中的应用
  9. 黑白风格android,颜色风格略不同 黑白华为Mate对比图赏
  10. C++调用ffmpeg批量合并bilibili缓存视频 2.0
  11. 为啥面试需要Aggressive?
  12. RUOK的完整形式是什么?
  13. python装饰器代码的简单记录
  14. 《Game说》| 揭秘百万DAU抖音现象级小游戏背后的故事
  15. java魔法师_RxJava魔法师
  16. 支付系统实时交易流水监控设计
  17. Crypto-RSA加密
  18. ionic+vue+capacitor系列笔记--02项目中集成Capacitor,添加android,ios平台,真机运行项目
  19. SpringBoot学生信息管理系统_毕业设计(附源码)
  20. 卷积神经网络CNN基本原理

热门文章

  1. Spark bucketing bucket分桶原理和应用
  2. 英语阅读重点单词总结
  3. 利用计算机实现音乐节拍的实时自动跟踪,音乐节拍实时跟踪系统的研究及应用...
  4. 搭建短视频被动收益系统的资源网站,实现月入过万
  5. 系统结构图、程序流程图、数据流图
  6. 体系、创新――战略制定的两个关键词
  7. 6010dn 华为 组网 胖ap_华为企业级WIFI6 FAT AP(胖AP) 一览
  8. 【Python案例】python批量采集下载dy视频
  9. ISPRS2020/遥感云检测:Transferring deep learning models for cloud detection between Landsat-8 and Proba-V
  10. 出门问问+android+wear,谷歌联手出门问问建Android Wear应用商店