基础算法基本知识前篇(枚举,模拟,递归,进制转换)及蓝桥杯练习

本文主要是介绍基础算法基本知识前篇(枚举,模拟,递归,进制转换)及蓝桥杯练习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

时间复杂度

数据范围反推时间复杂度

枚举

暴力枚举所有的可能,时间复杂度高

1.确定解的类型

2.常用的直接枚举法:双重for循环确定满足的区间

2.判断是否满足条件

模拟

建模(确定使用什么数据结构)

递归

方法中调用自己,必须有一个退出条件(n==1到达递归出口)

进制转换

n进制转十进制,从左往右(234)八进制转十进制:4*8^0+3*8^1+2*8^2

十进制转n进制模板

public static String f(int x,int n){StringBuilder str=new StringBuilder();       while(x>0){str.append(x%n);x=x/n;}return str.reserve().toString();//反转字符串,因为得到的是从n^0+...+n^}

编号325标题的统计

题目描述

凯凯刚写了一篇美妙的作文,请问这篇作文的标题中有多少个字符?

注意:标题中可能包含大、小写英文字母、数字字符、空格和换行符。统计标题字符数时,空格和换行符不计算在内。

输入描述

输入文件只有一行,一个字符串 s (1≤∣s∣≤5)。

输出描述

输出只有一行,包含一个整数,即作文标题的字符数(不含空格和换行符)。

输入输出样例

示例

输入

Ca 45

输出

4

代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan=new Scanner(System.in);String str=scan.nextLine();int count=0;for(int i=0;i<str.length();i++) {if(str.charAt(i)!=' '&&str.charAt(i)!='\t') {count++;}}System.out.println(count);}}

编码377计数问题

题目描述

试计算在区间 1 到 n 的所有整数中,数字 x(0≤x≤9) 共出现了多少次?

例如,在 1 到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。

输入描述

输入共 1 行,包含 2 个整数 n、x,之间用一个空格隔开。

其中,1≤n≤106,0≤x≤9。

输出描述

输出共 1 行,包含一个整数,表示 x 出现的次数。

输入输出样例

示例

输入

11 1

输出

4

代码

import java.util.*;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan=new Scanner(System.in);long n=scan.nextLong();int x=scan.nextInt();List<Long> list=new ArrayList<>();for(long i=0;i<n;i++) {list.add(i+1);}long count=0;//System.out.println(con(n,x));for(long i:list) {count+=con(i,x);}System.out.println(count);//System.out.println(count);}public static long con(long a,long b) {long count=0;if(a==0&&a==b) {count+=1;}while(a!=0) {if(a%10==b) {count++;a=a/10;}else{a=a/10;continue;}}return count;}
}

编号349扫雷

题目描述

在一个 n 行 m 列的方格图上有一些位置有地雷,另外一些位置为空。

请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。

输入描述

输入的第一行包含两个整数 n,m。

第 2 行到第 n+1 行每行包含 m 个整数,相邻整数之间用一个空格分隔。如果对应的整数为 0,表示这一格没有地雷。如果对应的整数为 1,表示这一格有地雷。

其中,1≤n,m≤100 分钟后还是在当天。

输出描述

输出 n 行,每行 m 个整数,相邻整数之间用空格分隔。

对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出 9。

输入输出样例

示例 1

输入

3 4
0 1 0 0
1 0 1 0
0 0 1 0

输出

2 9 2 1
9 4 9 2
1 3 9 2

代码

package lanqiaoyun;
import java.util.*;
public class a349 {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();int m=scan.nextInt();int [][]a=new int [n+2][m+2];for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {a[i][j]=scan.nextInt();}System.out.println(" ");}int [][]arr=new int[n+2][m+2];for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {if(a[i][j]==1) {arr[i][j]=9;}else {arr[i][j]=a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i][j+1]+a[i+1][j-1]+a[i+1][j]+a[i+1][j+1];}}System.out.println();}for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {System.out.print(arr[i][j]+" ");}System.out.println(" ");}}
}

编号287串的处理

题目描述

用户输入的串中只有小写字母,空格和数字,不含其它的字母或符号。每个单词间由 1 个或多个空格分隔。假设用户输入的串长度不超过 200 个字符。

输出描述

输出处理好的字符串。

输入输出样例

示例

输入

you and me what cpp2005program

输出

You And Me What Cpp_2005_program

代码

package lanqiaoyun;
import java.util.*;
public class a287 {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);String str=scan.nextLine();char []ch=str.toCharArray();//将字符串转化成字符StringBuilder str1=new StringBuilder();int c=str.length();int i=0;while(i<c) {char x=ch[i];//if(x>='a'&&x<='z') {if(i==0||ch[i-1]==' ') {x^=32;}//将首字母转换为大写(前一个数组为空格),包括第一个(i==0)str1.append(x);//将所有字母添加进去i++;}//如果是字母的情况else if(x==' '){str1.append(x);//第一次遇到空格添加进去while(x==' ') i++;//后面如果还存在空格直接i++}else {if(i>0&&ch[i-1]>='a'&&ch[i-1]<='z') {str1.append('_');}str1.append(x);//将不是字母的x添加进去if(i+1<c&&ch[i+1]>='a'&&ch[i+1]<='z') str1.append('_');i++;}}System.out.println(str1);	}}

编号斐波那契数列

题目描述

斐波那契数列的定义为F(n)=F(n-1)+F(n-2),F(1)=1,F(2)=1,请你输出数列的第n个数的对数1e9+7取模的值。

代码

package lanqiaoyun;
import java.util.*;public class feibonaqie {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();System.out.println(F(n));}public static long F(int n) {long num=0;if(n==1||n==2) {return 1;}num=F(n-1)+F(n-2);num=(long) (num%(1e9+7));return num;}}

编号760数的计算

题目描述

输入一个自然数 n (n≤1000),我们对此自然数按照如下方法进行处理:

  1. 不作任何处理;

  2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;

  3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止。

问总共可以产生多少个数。

输入描述

输入一个正整数 n。

输出描述

输出一个整数,表示答案。

输入输出样例

示例 1

输入

6

输出

6

代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {static int ans=1;public static void main(String[] args) {Scanner scan=new Scanner(System.in);//在此输入您的代码...int n=scan.nextInt();f(n);System.out.println(ans);scan.close();}public static void f(int n){if(n==1){	   return ;}for(int i=1;i<=n/2;i++) {f(i);ans++;}}
}

编号582二进制表示

题目描述

小明要用二进制来表示 11 到10000 的所有整数,要求不同的整数用不同的二进制数表示,请问,为了表示 11 到 10000 的所有整数,至少需要多少个二进制位?

代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {// TODO Auto-generated method stubstatic  long count=0;public static void main(String[] args) {// TODO Auto-generated method stubf(10000);System.out.println(count);}public static long f(int x) {StringBuilder str=new StringBuilder();while(x>0) {str.append(x%2);x=x/2;}count=str.reverse().toString().length();return count;}}

 编号663生日蜡烛

题目描述

某君从某年开始每年都举办一次生日 party,并且每次都要吹熄与年龄相同根数的蜡烛。

现在算起来,他一共吹熄了 236236 根蜡烛。

请问,他从多少岁开始过生日 party 的?

请输出他开始过生日party 的年龄数。

代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此输入您的代码...int sum=0; //第一次过生日的年龄for(int i=1;i<100;i++) {for(int j=i;j<100;j++) {sum+=j;if(sum==236) {System.out.println(i);break;}}sum=0;}}}

编码2293 0的个数

问题描述

给定一个正整数 n ,请问 n 的十进制表示中末尾总共有几个 0 ?

输入格式

输入一行包含一个正整数 n。

输出格式

输出一个整数,表示答案。

样例输入

20220000

样例输出

4

代码

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);long n=scan.nextLong();System.out.println(f(n));}public static long f(long n) {long count=0;while(n>0) {if((n%10)==0) {count++;}else {break;}n=n/10;}return count;}}

编号2489进制

问题描述

请问十六进制数 2021ABCD 对应的十进制是多少?

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

代码

package lanqiaoyun;public class a2489 {public static void main(String args[]) {String str="2021ABCD";char []a=str.toCharArray();int []c=new int[str.length()];StringBuilder str1=new StringBuilder();long xi=0;for(int i=str.length()-1;i>=0;i--) {if(a[i]>='A'&&a[i]<='F') {c[i]=(a[i]-'A'+10)*(int) Math.pow(16, xi);xi++;}else{c[i]= (a[i]-'0')*(int) Math.pow(16, xi);xi++;}}long count=0;for(int i=0;i<str.length();i++) {count+=c[i];}System.out.println(count);}
}

这篇关于基础算法基本知识前篇(枚举,模拟,递归,进制转换)及蓝桥杯练习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/890413

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Java 枚举的常用技巧汇总

《Java枚举的常用技巧汇总》在Java中,枚举类型是一种特殊的数据类型,允许定义一组固定的常量,默认情况下,toString方法返回枚举常量的名称,本文提供了一个完整的代码示例,展示了如何在Jav... 目录一、枚举的基本概念1. 什么是枚举?2. 基本枚举示例3. 枚举的优势二、枚举的高级用法1. 枚举

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

Java将时间戳转换为Date对象的方法小结

《Java将时间戳转换为Date对象的方法小结》在Java编程中,处理日期和时间是一个常见需求,特别是在处理网络通信或者数据库操作时,本文主要为大家整理了Java中将时间戳转换为Date对象的方法... 目录1. 理解时间戳2. Date 类的构造函数3. 转换示例4. 处理可能的异常5. 考虑时区问题6.

基于C#实现将图片转换为PDF文档

《基于C#实现将图片转换为PDF文档》将图片(JPG、PNG)转换为PDF文件可以帮助我们更好地保存和分享图片,所以本文将介绍如何使用C#将JPG/PNG图片转换为PDF文档,需要的可以参考下... 目录介绍C# 将单张图片转换为PDF文档C# 将多张图片转换到一个PDF文档介绍将图片(JPG、PNG)转

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖