题目:将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
import java.util.Scanner;
public class Test {
public static void m(int num) {
int k = 2; //因数从2开始,除了1和本身
System.out.print(num + "=");// 输出第一步格式
while (num > k) { //对最大因数判断,k不能大于因数
if (num % k == 0) {
System.out.print(k + "×");// 如果num % k,但n能被k整除,则应打印出k的值
num = num / k;// num除以k的商,作为新的正整数你num
} else if (num % k != 0) {
k++;
}
}
System.out.println(k);
}
//主函数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); //在控制台随意输入整数
int i = sc.nextInt();
m(i);
}
}
每周一总结
对于系统命令(cmd)
进入sql:mysql -uroot -p 接着就是输入密码
--显示数据库实例 show databases;--创建数据库实例 create database mydb;--使用数据库实例 user mydb;--显示实例中所有数据库表 show tables;
创建结构:
/*
user 表
用户表(id, name ,password)
*/
create table user(
id int primary key,
name varchar(10),
password varchar(10)
)
主键约束
主键 primary key
自动递增 auto_increment
唯一 unique
不为空 not null
unsigned:设置无符号列(列值不允许为负数)
zerofill:设置零填充列(当列数据长度不到定义长度时,数值 前补0
char类型跟varchar类型区别
char类型是定长字符串,默认大小是255(最大255);char类型一旦定义长度,则无论实际添加的数据长度是否达到最大长度,都会将定义空间占满,char类型效率高一般用于长度固定的列。
varchar类型是定长字符串,默认大小是255(最大长度取决与数据表的编码模式,utf-8:65535/3;GBK:65535/2),varchar类型定义长度之后系统不会直接分配对应大小的空间,而是根据实际填充值的长度申请空间,相对char类型更节省空间,所以varchar用于长度不定的列
SQL查询
sql语句DML语句中最为复杂的是查询语句,insert,update,delete语句多数情况为单表操作,但是select与可以关联多张数据表,针对sql查询需要明确三点:
-
查询列
-
查询目标表
-
查询条件
SQL查询语法:
SELECT 查询列1,查询列2,... FROM 目标表
【WHERE 查询条件】
【GROUP BY 列名称】
【HAVING 查询条件】
【ORDER BY 列名称 ASC|DESC】
【LIMIT [偏移行,]记录行数】
sql查询常见关键字:
-
from子句:指定查询数据的表
-
where子句:查询数据的过滤条件
-
group by子句:对匹配where子句的查询结果进行分组
-
having子句:对分组后的结果进行条件限制order by子句:对查询结果结果进行排序,后面跟desc降序或asc升序(默认)
-
limit子句:对查询的显示结果限制数目
select用法
一般的可以对表直接区别名 直接在表名后面加上别名 ,不能重复别名 (例:employee e)
可以将查询的整个当成一个子查询加上别名
例
select NAME
from employee e,(select Depno from department where depName='财务部') d
where e.Depno=d.Depno
#练习1:SELECT语句的基本使用
#(1)查询每个雇员的所有记录;
select e.*,s.*,d.*
from employee e,salary s, department d
where e.Num=s.Num and e.Depno=d.Depno
order by e.Num Asc
#(2)查询前5个雇员的所有记录;
select e.*,s.*,d.*
from employee e,salary s, department d
where e.Num=s.Num and e.Depno=d.Depno
order by e.Num Asc limit 0,5
#(3)查询每个雇员的地址和电话;
select Addr,Tel from employee
#(4)查询num为001的雇员地址和电话;
select Addr,Tel
from employee
where Num=1
#(5)查询表Employee表中女雇员的地址和电话,使用AS子句将结果列中各列的标题分别指定为地址、电话;
select Addr as 地址,Tel as 电话
from employee
where Sex='女'
#(6)计算每个雇员的实际收入;
select Num, InCome-OutCome 实际收入
from salary
#(7)找出所有性王的雇员的部门号(部门号不能重复显示);
select distinct Depno 部门号
from employee
where Name like '王%'
order by Depno asc
#(8)找出所有收入在2000-3000元之间的雇员编号
select Num 编号
from salary
where InCome between 2000 and 3000
#练习2:子查询的使用(答案可以不唯一)
#(1)查找在财务部工作的雇员情况;
select *
from employee e,(select Depno from department where depName='财务部') d
where d.Depno=e.Depno
select *
from employee e,department d
where d.Depno=e.Depno and depName='财务部'
#(2)查找在财务部且年龄不低于研发部任一个雇员年龄的雇员的姓名;
select NAME
from employee e,
(select Depno from department where depName='财务部') d
where e.Depno=d.Depno and e.Birth<all(
select e2.Birth
from employee e2,
(select Depno from department where depName='研发部') e1
where e2.Depno=e1.Depno
)
#(3)查找比所有财务部雇员收入都高的雇员的姓名;
select NAME
from employee e
where Num in(select Num from salary where Income> ALL
(select Income from salary where Num in (select Num from employee where Depno in
(select Depno from department where depName='财务部'))))
select name from employee where num
exit(select num from department d,salary s where )
#练习3:连接查询的使用
#(1)查找每个雇员的情况及薪水情况;
select e.*,s.*
from employee e,salary s
where e.Num=s.Num
#(2)查找财务部收入在2200元以上的雇员姓名及其薪水详细情况;
select e.Name,s.*
from employee e,salary s
where e.Depno in (select Depno from department where DepName='财务部')
and e.Num in (select Num from salary where InCome>2200) and e.Num=s.Num
#练习4:数据汇总
#(1)求财务部雇员的平均实际收入;
select avg(InCome-OutCome)
from salary s,employee e
where e.Num=s.Num and e.Depno in
(select Depno from department where depName='财务部')
#(2)求财务部雇员的总人数;
select count(*)
from salary s,employee e
where e.Num=s.Num and e.Depno in
(select Depno from department where depName='财务部')
#练习5:GROUP BY 、ORDER BY 子句的使用
#(1)求各部门的雇员数(要求显示,部门号、部门名称和部门雇员数);
select e.Depno 部门号,DepName 部门名称,count(e.Depno) 部门人数
from employee e,(select Depno , DepName from department ) d
where d.Depno=e.Depno
group by e.Depno
#(2)求部门的平均薪水大于2500的部门信息(要求显示,部门号、部门名称和平均工资)
select e.Depno 部门号 ,d.DepName 部门名称,avg(s.InCome) 平均工资
from employee e,(select Num,InCome from salary) s,(select Depno ,DepName from department)d
where d.Depno=e.Depno and e.Num=s.Num
group by e.Depno
having avg(s.InCome)>2500