最新文章欧拉计划:偶数斐波那契数
题目链接:偶数斐波那契数
解法一:暴力枚举看见题目,第一反应就是先找到小于400万的所有斐波那契数,再从这些斐波那契数中筛选出偶数进行求和。由于递归方法求斐波那契数的时间复杂度较高,故这里采用迭代的方法。
先通过循环逐个计算每个斐波那契数,直到达到了指定的最大值 。在循环中,每次更新 n 的值,并根据斐波那契数列的递推公式fib[n] = fib[n-1] + fib[n-2]来更新fib[n] 的值。然后,通过一个循环遍历斐波那契数列的所有元素,并累加所有偶数元素的和到变量sum中。
C语言代码123456789101112131415161718#include<stdio.h>#define Max_N 4000000int fib[Max_N+5] = {0};int main (){ fib[1]=1,fib[2]=2; int n = 2; while(fib[n]+fib[n-1]<=Max_N){ n++; fib[n]=fib[n-1]+fib[n-2]; ...
欧拉计划:3或5的倍数
题目链接:3或5的倍数
解法一:暴力枚举C语言代码
1234567891011#include<stdio.h>int main (){ int sum = 0; for(int i = 0;i<1000;i++){ if(i%3==0 || i%5==0) sum +=i; } printf("%d\n",sum); return 0;}//运行结果:233168
上面这个解法的时间复杂度为O(N),因为数据量小,所以可以使用暴力。 但如果把题目的1000变成$1000^{10000}$那么暴力解法的运行时间将非常高,因为需要枚举的数量会呈指数级增长。
Java代码
1234567891011public class Main { public static void main(String[] args) { int sum = 0; for (int i = 0; i < 10 ...
Java学习之旅:String类
一、常用方法String类是Java标准库中的一个核心类,用于表示字符串。字符串是一系列字符的集合。在Java中,String对象是不可变的,这意味着一旦创建了一个String对象,其内容就不能被更改。String类提供了许多实用方法,可以方便地操作和处理字符串。
查询文档:字符串官方文档
1、字符串构造String类提供的构造方式非常多,常用的就以下三种:
123456789101112public static void main(String[] args) { // 使用常量串构造 String s1 = "hello"; System.out.println(s1); // 直接newString对象 String s2 = new String("hello"); System.out.println(s1); // 使用字符数组进行构造 char[] array = {'h','e','l','l ...
位运算:按位与的性质
一、“与”运算的性质按位“&”的性质:
两个数的二进制位都为 1 时,结果位为 1
两个数的二进制位中只要有一个为 0 时,结果位为 0
二、练习示例使用按位与运算,实现一个方法,打印一个整数的32位二进制数
12345678910public static void print(int num){ for (int i = 31; i >=0 ; i--) { System.out.print((num&(1<<i))==0?"0":"1"); } System.out.println();}public static void main(String[] args) { int num = 3; print(num);}
1、代码解释使用for 循环,从 i = 31 开始递减至 i = 0。这里的 i 代表了整数 num 的二进制表示中的位索引(从左到右),即最高位开始(第 3 ...
Java学习之旅:抽象类
一、抽象类1、概念在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
12345678910111213141516171819202122232425262728package demo2;class Shape{ public void draw(){ System.out.println("画图形!"); }}class Cycle extends Shape{ @Override public void draw() { System.out.println("⭕"); }}class Rect extends Shape{ @Override public void draw() { System.out.println("矩 ...
Java学习之旅:继承和多态
一、前言在Java的核心概念中,继承和多态无疑是重要的一环。它们都是Java以及其他许多面向对象编程语言的基石,为我们提供了强大的工具来创建模块化,可重用和易于维护的代码。继承让我们可以创建新的类,通过继承现有类的属性和方法,来复用代码并添加或覆盖特定的行为。这为我们提供了一种强大的方式来组织和结构化我们的代码,使我们的代码更加易于理解和维护。
与此同时,多态则提供了一种允许我们将一个类的对象视为其父类或接口的对象的能力。这使我们能够编写出更加通用和灵活的代码,我们的代码可以对各种不同类型的对象执行相同的操作,而无需关心这些对象的具体类型。
二、继承Java中使用类对现实世界中实体来进行描述,类经过实例化之后的产物对象,则可以用来表示现实中的实体,但是现实世界错综复杂,事物之间可能会存在一些关联,那在设计程序是就需要考虑。
看一下,下面的两个类,一个猫类,一个狗类。
123456789101112131415// Dog.javapublic class Dog{ String name; int age; float weight; public v ...
递归算法:数学归纳法在编程中的应用
一、前言嵌套是指在一个事物中包含另一个事物,而递归是一种特殊形式的嵌套,其中一个事物包含自身。
递归就是一种嵌套的形式,递归函数解决问题时嵌套调用自身。递归的核心思想是通过反复应用相同的过程来解决问题,每一次调用都在规模上比上一次调用更小,直到达到基本情况从而终止递归。递归是一种强大而优雅的技术,它能够将复杂的问题分解成更小的子问题来解决,递归和数学归纳法有密切的关系,递归可以被看作是数学归纳法在编程中的一种具体应用。
二、递归初步理解递归 = 递推 + 回归
递归是指函数直接或间接地调用自身的过程。递归函数通常在满足基本条件时停止调用自身,从而避免无限循环。递归的思想是将一个大问题分解成一个或多个相同的较小问题,直到问题简化到可以直接解决为止。
1、数学归纳法数学归纳法的核心思想是:如果一个性质对于某个数成立,而且可以证明如果对于任何数n该性质成立就能推导出对于n+1也成立,那么这个性质就对所有正整数成立。
数学归纳法主要包括两个步骤:
基础步骤:首先要证明该性质对于初值(通常是1或0)成立。
归纳步骤:然后要假设性质对于某个数n成立(这被称为归纳假设),并证明这个 ...
初探MySQL:数据库基本操作
一、数据库操作数据库操作:
用户在客户端输入SQL
客户端会把SQL通过网络发送给服务器
服务器执行这个SQL
客户端收到结果,显示到界面上
1、创建数据库:1create database 数据库名;
1create database java108 charset utf8;
注意事项:
create database 相当于一个关键字
SQL中不会区分大小写
创建的数据库名可以随便取,但是不能重复
character set:指定数据库采用的字符集
看见OK说明创建成功。
2、查看所有数据库1show databases;
红圈中的四个都是系统自带的数据库。
3、选中指定数据库1use 数据库名;
一旦选定了某个数据库,后续操作,就是针对该数据库展开了。
4、删除数据库1drop database 数据库名;
该操作属于危险操作!!!一旦删除数据库,数据库中的所有数据都没有了,很难恢复。
如何预防危险操作:
权限:不同的用户能进行的操作是不一样的。
备份:一旦不小心删除数据,通过备份数据恢复。
检查:重要操作的时候,多人进行检查。
二、数据表操作 ...
Java学习之旅:类和对象
一、前言Java是一种广泛应用于各个领域的编程语言,它的面向对象编程范式使得它成为了当今软件开发的主要选择之一。通过面向对象编程,Java使程序员能够将代码组织成易于理解和维护的结构,并且在开发大型复杂的应用程序时提供了许多便利。
与传统的过程式编程不同,面向对象编程将程序组织成一系列相互独立的对象,每个对象都有自己的属性和行为,它们可以通过消息传递来与其他对象交互。这种编程范式使得代码更易于重用、扩展和测试,并且有助于提高代码的可维护性和可读性。
在本博客中,我们将一起探讨Java面向对象编程的基础概念。
1、什么是面向过程C语言就算一门面向过程的语言,面向过程编程(Procedural Programming)是一种计算机编程方法,其核心思想是将程序视为一系列的过程或函数,每个过程或函数都是完成一个特定的任务。面向过程编程强调步骤与逻辑的过程管理,需要手动编写代码实现每一步骤。在面向过程编程中,数据和方法是分离的,通常使用全局变量进行数据传递。因此,面向过程编程通常被认为是较低级别的编程方式,其主要用途是解决简单或特定的问题。
2、什么是面向对象Java是一门纯面向对象的语言(O ...
Java学习之旅:数组
一、前言数组,一种最基础的数据结构。
二、数组的基本概念1、什么是数组数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间。比如现实中的车库:
在java中,包含6个整形类型元素的数组,就相当于上图中连在一起的6个车位,从上图中可以看到:
数组中存放的元素其类型相同
数组的空间是连在一起的
每个空间有自己的编号,其实位置的编号为0,即数组的下标。
2、数组的创建1T[] 数组名 = new T[N];
T:表示数组中存放元素的类型
T[]:表示数组的类型
N:表示数组的长度
123int[] array1 = new int[10]; // 创建一个可以容纳10个int类型元素的数组double[] array2 = new double[5];// 创建一个可以容纳5个double类型元素的数组String[] array3 = new String[3];// 创建一个可以容纳3个字符串元素的数组
3、数组的初始化数组的初始化主要分为动态初始化以及静态初始化。
Ⅰ、动态初始化动态初始化:在创建数组时,直接指定数组中元素的个数
1int[] array ...