* 1.将一个正整数分解为质因数
* 2.求一元二次方程的根
* 3.输出数组里两个最大值
* 4.给定四个整数排序 5.分解质因数(同1)
* 6.小球反弹
* 7.4取3排列
* 8.双层list扁平化(??不会)
* 9.完全数判断
* 10.求长度递增序列的和
* 11.统计兔子总数
* 12.从键盘输入一个月利润求应发奖金数
* 13.根据年月日判断是一年的第几天
* 14.输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数
* 15.判断0-99999之间任意数是几位数
* 16.根据份证号码计算年龄
* 17.根据成绩给出相应等级
* 18.猴子吃桃
* 19.验证给定整数能否被9整除
* 20.验证“鬼谷猜想”
* 21.百钱买百鸡
* 22.判断能否构成三角形
* 23.小写字母转换
* 24.判断101-200之间有多少个素数并输出 (32题)
* 25.字符次数统计
* 26.输入字符串将该字符串中数字放到非数字的后面,并保持原有顺序不变
* 27.字符串字母替换
* 28.字典序打印出字符串中字符所有排序
* 29.第五个人多大
* 30.围圈报数
* 31.IP合法性校验
* 32.输出200-500之间素数(24题)
* 33.逆向打印给定字符串
* 34.3的倍数之和 1-200之间所有
* 35.整数反序输出
* 36.计算n!中含有0的个数
* 37.编写整型反序 (35题)
* 38.编写蛇形矩阵
* 39.求最大公约数最小公倍数
* 40.寻找某数字
* 一个数字加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少
* 41.打印水仙花数
* 42.求给定数值的幻方结果
1-5
package com.leetCode.demo02;
import java.util.Scanner;
public class demo001 {
//1.将一个正整数分解为质因数
public static void main(String[] args) {
System.out.println("请输入一个正整数:");
Scanner a = new Scanner(System.in);
int n = a.nextInt();
for (int k = 2; k <= n / 2; k++) {
if (n % k == 0) {
System.out.print(k + "*");
n = n / k; // 用递归把n重新定值
k = 2; // 这步很重要,让for循环重新执行
}
}
System.out.print(n); // 把最后一个质因数输出
}
}
package com.leetCode.demo02;
import java.text.DecimalFormat;
import java.util.Scanner;
public class demo002 {
// 2.求一元二次方程的根
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("请输入方程的系数a、b、c:");
int a, b, c;
a = reader.nextInt();
b = reader.nextInt();
c = reader.nextInt();
DecimalFormat df = new DecimalFormat("0.000000");
int delta;
double x1, x2;
delta = b * b - 4 * a * c;
if (a == 0 && b == 0 && c == 0) {
System.out.println("方程有无限根。");
return;
}
if (a == 0 && b == 0 & c != 0) {
System.out.println("方程无解。");
return;
}
if (delta == 0) {
x1 = b / -2.0 / a;
x2 = b / -2.0 / a;
System.out.println("方程有两个相同实根, x1 = " + df.format(x1) + ", x2 = " + df.format(x2));
}
if (delta > 0) {
x1 = (-b + Math.sqrt(delta)) / 2.0 / a;
x2 = (-b - Math.sqrt(delta)) / 2.0 / a;
System.out.println("方程有两个不同实根, x1 = " + df.format(x1) + ", x2 = " + df.format(x2));
}
if (delta < 0) {
double s, x;
s = -b / 2.0 / a;
x = Math.sqrt(-delta) / 2.0 / a;
System.out.println("方程有虚根, x1 = " + df.format(s) + " + "
+ df.format(x) + "i, x2 = " + df.format(s) + " - "
+ df.format(x) + "i");
}
}
}
package com.leetCode.demo02;
public class demo003 {
// 3.输出数组里两个最大值
static int[] twoMaxNum(int[] data) {
if (data == null || data.length == 0)
return null;
int result[] = new int[2];
result[0] = result[1] = Integer.MIN_VALUE;
for (int i = 1; i < data.length; i++)
if (data[i] > result[0])
result[0] = data[i];
for (int i = 1; i < data.length; i++)
if (data[i] > result[1] && data[i] < result[0])
result[1] = data[i];
return result;
}
//4.给定四个整数排序
public static void main(String[] args) {
int data[] = { 1, 2, 5, 9, 84, 2, 3 };
System.out.println("最大的两个数为:" + twoMaxNum(data)[0] + "," + twoMaxNum(data)[1]);
//-------34分隔
}
}
package com.leetCode.demo02;
import java.util.Arrays;
import java.util.Scanner;
public class demo004 {
// 4.给定四个整数排序
public static void main(String[] args) {
int wait_inputs[] = {4,1,2,3};
// for (int i = 0; i < wait_inputs.length; i++) {
// System.out.println("输入第" + (i + 1) + "个数,并回车:");
// wait_inputs[i] = new Scanner(System.in).nextInt();
// }
Arrays.sort(wait_inputs);
System.out.println(Arrays.toString(wait_inputs));
}
}
6-10
package com.leetCode.demo02;
public class demo006 {
//6.小球反弹
public static void main(String[] args) {
double wh = 100;
double sum = 0;
int num = 0;
while(num<9){//为什么要小于9?-因为num从0开始递增,所以要小于9.
//sum为总路程,每次下降的总路程为本次的下落和弹起高度之和加上之前的路程累积。
sum = sum+wh+wh/2;
wh = wh/2;
num++;
}
//sum后面再加一个wh的原因:所求的路程包括第十次下落的次数。
System.out.println("10次落地路程为:"+(sum+wh));
//第十次反弹高度为上一次下落高度的1/2.
System.out.println("第十次弹起高度为:"+wh/2);
}
}
package com.leetCode.demo02;
public class demo007 {
// 7.4取3排列
/**
* 这个是没有列举出来的 public static long pnc(int n, int m){
*
* long numerator = 1; for(;n>1;n--){ numerator = numerator*n; }
*
* long denominator = 1; for(int i=n-m;i>1;i--){ denominator =
* denominator*i; } return numerator/denominator; }
*/
public static void pnc() {
long pnc = 0;
for (int i = 1; i <= 4; i++) {
for (int j = 1; j <= 4; j++) {
for (int k = 1; k <= 4; k++) {
if (i != j && i != k && j != k) {
pnc++;
int num = i * 100 + j * 10 + k;
System.out.print(num + " ");
}
}
}
}
System.out.println("\n" + "一共有: " + pnc);
}
// main方法
public static void main(String args[]) {
// System.out.println(pnc(4,3));
pnc();
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo009 {
// 9.完全数判断
/**
* 编程求1~10000之间的所有“完全数”,完全数是该数的所有因子之和等于该数的数。 例如,6的因子有2、3,且6=1+2+3, 所以6是完全数。
* 思路把能整除的数都累加加起来,判断是否等于本身
*/
public static void main(String[] args) {
for (int i = 1; i <= 10000; i++) { // 初始默认值i=1,判断i是否小于等于10000;如果i小于等于10000,
// 则执行循环体,执行后i+1,否则输出
int count = 0; // 定义 累加和
for (int j = 1; j < i; j++) { // 定义一个j,判断这个i是否是因字数
if (i % j == 0) { // 判断i是否可以整除j
count = count + j; // 如果j是因字数就把j的值加入到count的值中
}
}
if (i == count) { // 判断i的值是否和count的值相等,因为完全数为个个因字数相加的和
System.out.println("数字: " + i + " 是完全数 ");// 打印输出完全数
}
}
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo010 {
public static void main(String[] args) {
// 10、求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
// 例如2+22+222+2222+22222
// (此时 共有5个数相加),几个数相加有键盘控制。
Scanner reader = new Scanner(System.in);
int a = 0, n = 0, b = 0;
System.out.println("输入a:");
a = reader.nextInt();
b = a;// 缓存尾数
System.out.println("输入次数n:");
n = reader.nextInt();
int sum = 0;// 累加器
for (int i = 0; i < n; i++)// 得到最大的那个数
{
// System.out.println("a="+a);
sum += a;// 累加求和
a = a * 10;// 前移一位
a += b;// 加尾数
//
}
System.out.println("sum=" + sum);
}
}
11-15
package com.leetCode.demo02;
import java.util.Scanner;
public class demo11 {
//11.统计兔子总数
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入第几个月");
while (sc.hasNext()) {
int n = sc.nextInt();
System.out.println(getTotalCount(n));
System.out.println(getTotalCount2(n));
}
}
/**
* 迭代写法
*
* @param MonthCount
* 第几月
* @return 兔子个数
*/
private static int getTotalCount2(int MonthCount) {
if (MonthCount < 3) {
return 1;
}
int first = 1;// 表示上月生的兔子
int second = 1;// 表示这个月有能力生的兔子
int count = 0;// 记录兔子总数
// 从第三个月起
for (int i = 2; i < MonthCount; i++) {
count = first + second;// 上月生的兔子+这个月有能力生的兔子
// 更新上月生的兔子、这个月有能力生的兔子
first = second;
second = count;
}
return count;
}
/**
* 递归写法
*
* @param MonthCount
* 第几月
* @return 兔子个数
*/
public static int getTotalCount(int MonthCount) {
if (MonthCount == 1 || MonthCount == 2) {
return 1;
}
return getTotalCount(MonthCount - 1) + getTotalCount(MonthCount - 2);
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo12 {
/** 12.
* 企业发放的奖金根据利润提成。利润I低于或等于100 000元的,奖金可提成10%;
* 利润高于100 000元,低于200 000元(100 000 < I ≤ 200 000)时,
* 低于100 000元的部分按10%提成,高于100 000元的部分,可提成7.5%;
* 200 000 < I ≤ 400 000时,低于200 000元的部分仍按上述办法提成(下同)。
* 高于200 000元的部分按5%提成;
* 400 000 < I ≤ 600 000元时,高于400 000元的部分按3%提成;
* 600 000 < I ≤ 1 000 000时,高于600 000元的部分按1.5%提成;
* I > 1 000 000时,超过1 000 000元的部分按1%提成。
* 从键盘输入当月利润I,求应发奖金总数。
*/
public static void main(String[] args) {
//创建输入的新对象
Scanner input = new Scanner(System.in);
//输入利率
System.out.println("请输入利润:");
float x = input.nextFloat();
//计算相对于区间的奖金
float p1 = (float)(x * 0.1);
float p2 = p1 + (float)((x - 100000) * 0.075);
float p3 = p2 + (float)((x - 200000) * 0.05);
float p4 = p3 + (float)((x - 400000) * 0.03);
float p5 = p4 + (float)((x - 600000) * 0.015);
float p6 = p5 + (float)((x - 1000000) * 0.01);
//判断利率所对应的利率,并输出奖金
if(x <= 100000)
System.out.println("奖金是:" + p1);
else if(x > 100000 && x <= 200000)
System.out.println("奖金是:" + p2);
else if(x > 200000 && x <= 400000)
System.out.println("奖金是:" + p3);
else if(x > 400000 && x <= 600000)
System.out.println("奖金是:" + p4);
else if(x > 600000 && x <= 1000000)
System.out.println("奖金是:" + p5);
else if(x > 1000000)
System.out.println("奖金是:" + p6);
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo13 {
/*13
从键盘输入年月日,判断这一天是一年中的第几天?
小知识点:
判断年份为闰年的条件:
可以被4整除,但不能被100整除 或 可以被400整除。
*/
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入年:");
int year = scan.nextInt();
System.out.println("请输入月:");
int month = scan.nextInt();
System.out.println("请输入日:");
int day = scan.nextInt();
int sumDays = 0;
switch(month){
case 12:
sumDays += 30;//11月的总天数30
case 11:
sumDays += 31;//10月的总天数31
case 10:
sumDays += 30;//9月的总天数30
case 9:
sumDays += 31;//8月的总天数31
case 8:
sumDays += 31;//7月的总天数31
case 7:
sumDays += 30;//6月的总天数30
case 6:
sumDays += 31;//5月的总天数31
case 5:
sumDays += 30;//4月的总天数30
case 4:
sumDays += 31;//3月的总天数31
case 3:
if ((year % 4 ==0 && year % 100 !=0) || year % 400 ==0){
sumDays += 29;//闰年2月的总天数29
}else{
sumDays += 28;//非闰年2月的总天数28
}
case 2:
sumDays += 31;//1月的总天数31
case 1:
sumDays += day;//当月的天数
}
System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}
}
package com.leetCode.demo02;
import java.util.Scanner;;
public class demo14 {
// 14.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一串字符串:");
String a = in.nextLine(); // 基本输入
char[] b = a.toCharArray(); // 字符串转字符
int Letter = 0; // 字母
int Num = 0; // 数字
int Space = 0; // 空格
int Character = 0; // 其他字符
for (int i = 0; i < b.length; i++) {
b[i] = a.charAt(i); // 取每一个字符
if (63 <= b[i] && b[i] <= 90 || 97 <= b[i] && b[i] <= 122) // 字母
Letter++;
else if (48 <= b[i] && b[i] <= 57) // 数字
Num++;
else if (b[i] == 32) // 空格
Space++;
else
Character++; // 其他字符
}
System.out.print("数字的个数是" + Num + " 字符的个数是" + Character + " 空值的个数是" + Space + " 其他的个数是" + Character);
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo15 {
//15.判断任意数是几位数
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数");
int num = scanner.nextInt();
System.out.println(pan(num));
}
private static int pan(int num) {
// TODO Auto-generated method stub
int count = 0;
while (num >= 10) {
num /= 10;
count++;
}
return count + 1;
}
}
16-20
package com.leetCode.demo02;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class demo16 {
private static final int invalidAge = -1;// 非法的年龄,用于处理异常。
public static void main(String[] args) {
String idNumber="32173219980418513X";
System.out.println("年龄为:"+getAgeByIDNumber(idNumber));
}
/**
* 根据身份证号码计算年龄
*
* @param idNumber
* 考虑到了15位身份证,但不一定存在
*/
public static int getAgeByIDNumber(String idNumber) {
String dateStr;
if (idNumber.length() == 15) {
dateStr = "19" + idNumber.substring(6, 12);
} else if (idNumber.length() == 18) {
dateStr = idNumber.substring(6, 14);
} else {// 默认是合法身份证号,但不排除有意外发生
return invalidAge;
}
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
try {
Date birthday = simpleDateFormat.parse(dateStr);
return getAgeByDate(birthday);
} catch (ParseException e) {
return invalidAge;
}
}
/**
* 根据生日计算年龄
*
* @param dateStr
* 这样格式的生日 1990-01-01
*/
public static int getAgeByDateString(String dateStr) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date birthday = simpleDateFormat.parse(dateStr);
return getAgeByDate(birthday);
} catch (ParseException e) {
return -1;
}
}
public static int getAgeByDate(Date birthday) {
Calendar calendar = Calendar.getInstance();
// calendar.before()有的点bug
if (calendar.getTimeInMillis() - birthday.getTime() < 0L) {
return invalidAge;
}
int yearNow = calendar.get(Calendar.YEAR);
int monthNow = calendar.get(Calendar.MONTH);
int dayOfMonthNow = calendar.get(Calendar.DAY_OF_MONTH);
calendar.setTime(birthday);
int yearBirthday = calendar.get(Calendar.YEAR);
int monthBirthday = calendar.get(Calendar.MONTH);
int dayOfMonthBirthday = calendar.get(Calendar.DAY_OF_MONTH);
int age = yearNow - yearBirthday;
if (monthNow <= monthBirthday && monthNow == monthBirthday && dayOfMonthNow < dayOfMonthBirthday
|| monthNow < monthBirthday) {
age--;
}
return age;
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo17 {
//17.按成绩给等级
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请您输入一个学生成绩:");
int score = scanner.nextInt();
if (score > 100 || score < 0) {
System.out.println("您输入的数据是一个非法数据...");
} else if (score >= 90 && score <= 100) {
System.out.println("优秀");
} else if (score >= 80 && score < 90) {
System.out.println("良好");
} else if (score >= 70 && score < 80) {
System.out.println("中等");
} else if (score >= 60 && score < 70) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
package com.leetCode.demo02;
public class demo18 {
// 猴子吃桃
public static void main(String[] args) {
// 天数
int i = 9;
// 第十天剩余桃子个数/桃子数量
int j = 1;
// 只要超过第一天就循环,直到到第一天结束
while (i >= 1) {
// 前一天是后一天桃子数量加一的两倍
j = (j + 1) * 2;
// 预备计算前一天
i--;
}
// 打印桃子个数
System.out.println(j);
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo19 {
// 19、一个三位数整数的各位数字之和能被 9 整除,则该数也能被 9 整除。编程验证给
// 定的整数能否被 9 整除。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个数");
int x = sc.nextInt();
System.out.println(isNinth(x));
}
public static boolean isNinth(int x) {
int a = x / 100;
int b = x % 100 / 10;
int c = x % 100 % 10;
// System.out.println(a + "..." + b + "..." + c);
if ((a + b + c) % 9 == 0 && x % 9 == 0)
return true;
else
return false;
}
}
package com.leetCode.demo02;
import java.io.IOException;
import java.util.Scanner;
public class demo20 {
//20.验证鬼谷思想
public static void main(String[] args) throws IOException {
System.out.println("请输入一个自然数");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
for (int i = 0;; i++) {
if (a % 2 == 0) {
// 引用为奇数时的函数
a = ou(a);
} else {
// 引用为偶数时的函数
a = ji(a);
}
if (a == 1) {
System.out.println("经过" + i + "次计算后");
break;
}
}
System.out.println("得到" + a);
}
public static int ji(int a) {
int b = a * 3 + 1;
return b;
}
public static int ou(int a) {
int b = a / 2;
return b;
}
}
21-25
package com.leetCode.demo02;
public class demo21 {
/*
* 21.百钱买百鸡 鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?
*/
public static void main(String[] args) {
int way = 1; // 买法
int k = 0; // 雏鸡数
for (int i = 1; i <= 20; i++) { // 公鸡数
for (int j = 1; j <= 33; j++) { // 母鸡数
k = 100 - i - j; // 一共100只鸡
if (k % 3 == 0 && (5 * i + 3 * j + k / 3 == 100)) {// 雏鸡数是3的倍数,总计100文钱
System.out.print("[买法 " + way++ + "] ");
System.out.println("公鸡: " + i + " 母鸡:" + j + " 雏鸡:" + k);
}
}
}
}
}
/*
* [买法 1] 公鸡: 4 母鸡:18 雏鸡:78 [买法 2] 公鸡: 8 母鸡:11 雏鸡:81 [买法 3] 公鸡: 12 母鸡:4 雏鸡:84
*/
package com.leetCode.demo02;
import java.util.Scanner;
public class demo22 {
// 22.判断是否可以构成三角形;
public static void main(String[] args) {
System.out.print("output:请输入三角形的条边长:");
Scanner cin = new Scanner(System.in);
int a = cin.nextInt();
int b = cin.nextInt();
int c = cin.nextInt();
if (a + b <= c || a + c <= b || c + b <= a) {
System.out.print("不能构成三角形!");
} else {
int l = a + b + c;
System.out.print("可以构成三角形,且周长为:" + l);
}
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo23 {
// 23.小写字母转换
public static void main(String[] args) {
System.out.println("输入一个字符:");
Scanner sc = new Scanner(System.in);
char ch = sc.next().charAt(0);
if ((ch >= 'a' && ch <= 'z'))// 读取的单个字符在'a'和'z'之间才可以转换
{
ch = (char) ((int) ch - 32);// 先将字符ch转换为整型计算ASCII码,再转换为字符型输出字符A~Z的ASCII码为65~90,字符a~z的ASCII码为97~122,每个大小写字符的ASCII码都相差32,因此用小写字符的ASCII码
// 减去32即可得到该字符的大写形式
System.out.println(ch);
}
else{
System.out.println("不需要转换");
}
}
}
package com.leetCode.demo02;
public class demo24 {
// 24.判断101-200之间有多少个素数并输出
public static void main(String[] args) {
isPrime();
}
public static void isPrime() {
int count = 0;
for (int i = 101; i < 200; i++) {
// 判断i是不是素数
boolean flag = true;// 假设i是素数
for (int j = 2; j <= i / 2; j++) {// 这里改成了i/2
if (i % j == 0) {
flag = false;// 表示i不是素数
break;
}
}
if (flag) {
count++;
System.out.print(+i + "、");
}
}
System.out.println();
System.out.println("总共有" + count + "个");
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo25 {
// 25.
public static void main(String[] args) {
System.out.println("输入一个字符串:");
Scanner sc = new Scanner(System.in);
String str = sc.next();
int count = 0;// 统计单个字符出现的次数
for (int i = 0; i < str.length(); i++) {
int old_length = str.length();
char c = str.charAt(0);
// 定义一个字符等于字符串第一个字符.每次统计完会将统计过的字符替换掉.
String new_str = str.replaceAll(c + "", "");// 定义一个新字符串将出现的字符
// 赋给一个新的字符串
int new_length = new_str.length();
count = old_length - new_length;// 旧的长度减去新的长度就是字符出现的 次数
str = new_str;// 将替换并统计过次数的字符串赋给原来的字符串,便于下一次遍历
System.out.println("字符" + c + "出现了" + count + "次");
}
}
}
26-30
package com.leetCode.demo02;
import java.util.Scanner;
public class demo26 {
// 26.输入字符串将该字符串中数字放到非数字的后面,并保持原有顺序不变
static String stringCharFrontNumEnd(String string) {
if (string == null || string.length() == 0)
return null;
String charString = "";
String numString = "";
for (int i = 0; i < string.length(); i++) {
if (string.charAt(i) >= '0' && string.charAt(i) <= '9')
numString += string.charAt(i);
if (string.charAt(i) >= 'a' && string.charAt(i) <= 'z'
|| string.charAt(i) >= 'A' && string.charAt(i) <= 'Z')
charString += string.charAt(i);
}
return charString + numString;
}
public static void main(String[] args) {
System.out.println("输入一个字符串:");
Scanner sc = new Scanner(System.in);
String str = sc.next();
System.out.println(stringCharFrontNumEnd(str));
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo27 {
/**
*
* 27.将字符串中的字母全部替换成字母的下一个字母,要是最后一位是z或Z则替换为a或A。
*
* 输入:aBxyZ
*
* 输出:bCyzA
*/
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("请输入字符串");
String str = scn.next();
String str1 = swapString(str);
System.out.println("转换的字符串是:" + str1);
}
public static String swapString(String str) {
char[] ch = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
if ((ch[i] + 1) > 'z' && ch[i] > 96) {
ch[i] = (char) (ch[i] - 25);
} else if ((ch[i] + 1) > 'Z' && ch[i] < 'a') {
ch[i] = (char) (ch[i] - 25);
} else {
ch[i] = (char) (ch[i] + 1);
}
}
return String.valueOf(ch);
}
}
package com.leetCode.demo02;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeSet;
public class demo28 {
//28.字典序打印出字符串中字符所有排序
public static void main(String[] args) {
System.out.println("请输入字符串:");
String str = "";
Scanner scan = new Scanner(System.in);
str = scan.nextLine();
printall(str);
System.out.println(printall(str));
}
private static ArrayList<String> printall(String str) {
ArrayList<String> result = new ArrayList<>();
if (str == null || str.length() == 0){
return result;
}
char[] chars = str.toCharArray();
//按字典顺序输出
TreeSet<String> temp = new TreeSet<>();
printallstr(chars,temp,0);
result.addAll(temp);
return result;
}
private static void printallstr(char[] chars, TreeSet<String> temp, int index) {
if (chars == null || chars.length == 0 || index < 0 || index > chars.length){
return;
}
if (index == chars.length-1){
//递归的结束
temp.add(String.valueOf(chars));
}else {
for (int i = index;i < chars.length;i++){
//把第一个字符和后面的字符交换
swap(chars,i,index);
//对后面的所有字符进行全排列
printallstr(chars,temp,index+1);
//把第一个字符再换回来,方便再与其他字符交换
swap(chars,i,index);
}
}
}
private static void swap(char[] chars, int i, int index) {
char temp = chars[i];
chars[i] = chars[index];
chars[index] = temp;
}
}
package com.leetCode.demo02;
public class demo29 {
// 29.有5个人坐在一起,
// 第五个人多少岁?他说比第4个人大ageMore岁。
// 问第4个人岁数,他说比第3个人大ageMore岁。
// 问第三个人,又说比第2人大ageMore岁。
// 问第2个人,说比第一个人大ageMore岁。
// 最后问第一个人,他说是10岁。
// 请问第五个人多大?
public static void main(String[] args) {
int firstAge = 10;
int ageMore = 2;
System.out.println(age(firstAge, ageMore));
}
public static int age(int firstAge, int ageMore) {
int age = firstAge;
for (int i = 2; i <= 5; i++) {
age += ageMore;
}
return age;
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo30 {
//30.围圈报数
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.print("请输入排成一圈的人数:");
int n = s.nextInt();
boolean[] arr = new boolean[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = true;
} // 数组赋值都是true
int leftCount = n;
int countNum = 0;
int index = 0;
while (leftCount > 1) {
if (arr[index] == true) {
countNum++;
if (countNum == 3) {
countNum = 0;
arr[index] = false;
leftCount--;
}
}
index++;
if (index == n) {
index = 0;
}
}
for (int i = 0; i < n; i++) {
if (arr[i] == true) {
System.out.println("原排在第" + (i + 1) + "位的人留下了。");
}
}
}
}
31-35
package com.leetCode.demo02;
import java.util.Scanner;
import java.util.regex.Pattern;
public class demo31 {
//31.ip是否合法
public static void main(String[] args) {
System.out.println("请输入ip:");
String ip = "";
Scanner scan = new Scanner(System.in);
ip = scan.nextLine();
System.out.println(isValidIPAddress(ip));
}
// 使用正则表达式
public static boolean isValidIPAddress(String ipAddress) {
if ((ipAddress != null) && (!ipAddress.isEmpty())) {
return Pattern.matches(
"^([1-9]|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])(\\.(\\d|[1-9]\\d|1\\d{2}|2[0-4]\\d|25[0-5])){3}$",
ipAddress);
}
return false;
}
}
package com.leetCode.demo02;
import java.util.ArrayList;
import java.util.List;
public class demo32 {
// 32.输出200-500之间素数
public static void main(String[] args) {
ArrayList<Integer> result = isPrime();
for (int i = 0; i < result.size(); i++) {
System.out.print(result.get(i)+"、");
}
}
public static ArrayList<Integer> isPrime() {
int count = 0;
ArrayList<Integer> result = new ArrayList<>();
for (int i = 200; i <= 500; i++) {
// 判断i是不是素数
boolean flag = true;// 假设i是素数
for (int j = 2; j <= i / 2; j++) {// 这里改成了i/2
if (i % j == 0) {
flag = false;// 表示i不是素数
break;
}
}
if (flag) {
count++;
// System.out.print(+i + "、");
result.add(i);
}
}
// System.out.println();
// System.out.println("总共有" + count + "个");
return result;
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo33 {
//逆向打印给定字符串
public static void main(String[] args) {
System.out.println("请输入字符串:");
String str = "";
Scanner scan = new Scanner(System.in);
str = scan.nextLine();
System.out.println(reverse(str));
}
public static String reverse(String s) {
int length = s.length();
String r = "";
for (int i = length - 1; i >= 0; i--) {
char c = s.charAt(i);
r = r + c;
}
return r;
}
}
package com.leetCode.demo02;
public class demo34 {
public static void main(String[] args) {
int sum = 0, i = 1;
while (i <= 200) {
if (i % 3 == 0) {
sum += i;
}
i++;
}
System.out.println(sum);
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo35 {
// 整数反序输出
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = in.nextInt();// 得到输入的整数
int sum = 0;
int i = 1;
boolean positive = true; // 判断负数情况 true正数false负数
if (n < 0) {
positive = false;
n = -n;
}
while (n > 0) {// 当余数不为0的时候,继续操作
int d = n % 10;
sum = sum * 10 + d;
n = n / 10;
}
if (positive)
System.out.println(sum);
else
System.out.println(-sum);
}
}
36-40
package com.leetCode.demo02;
import java.util.Scanner;
public class demo36 {
// 36.计算n!中含有0的个数
public static int getZeroCount(int n) {
int num = 0;
int data =1;
while (true) {
data = data * 5;
num += n / data;
if (data > n) {
break;
}
}
return num;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个整数:");
int n = in.nextInt();
System.out.println(getZeroCount(n));
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo38 {
// 蛇形矩阵
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入一个数:");
int n = sc.nextInt();
int shu = 1;
// 定义一个数组第一个表示行,第二个表示每一行的内容
int[][] array = new int[n][];
// 循环行的个数
for (int i = 0; i < n; i++) {
// 表示行打印数字的个数
array[i] = new int[n - i];
// 主要循环 看数字规律得知每一个数字的位置a要递减,b要递增
for (int a = i, b = 0; a >= 0; a--, b++) {
// 打印每个位置的数字
array[a][b] = shu;
// 打印完后数字要加一
shu++;
}
}
// 打印所得的结果
for (int i = 0; i < n; i++) {
for (int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
// 每一行打印完要换行
System.out.println();
}
// 用完后要关闭防止占用资源
sc.close();
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo39 {
//39.求最大公约数最小公倍数
public static void main(String[] args) {
System.out.println("请输入两个整数:");
Scanner input1 = new Scanner(System.in);
int a = input1.nextInt();
int b = input1.nextInt();
int u = a * b; // 用u来保存 a*b 的值
while (b > 0) {
if (a >= b && a % b != 0) {
int t = b;
b = a % b; // 利用了递归算法
a = t;
} else if (a % b == 0) {
break; // a刚好是b的倍数
} else {
int s = a; // 当 a < b 时 ,a b的值交换
a = b;
b = s;
}
}
System.out.println("两个数的最大公约数为:" + b);
System.out.println("两个数的最小公倍数为:" + u / b);
}
}
package com.leetCode.demo02;
public class demo40 {
/**
* 40.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少 分析: 按照给题的思路 假设这个整数是num
* (num+100) = i * i (num+100+168) = j * j 得到 (j * j) - (i * i) = 168 (j +
* i)(j - i) = 168 j - i 最小等于 1 时 j 与 i 都不大于 168 并且j > i 等到如下解:
*/
public static void main(String[] args) {
// i的平方是完全平方数并且i小于168
for (int i = 0; i < 168; i++) {
// j的平方是完全平方数,j小于168并且大于i
for (int j = i + 1; j < 168; j++) {
// 判断是否符合条件
if (j * j - i * i == 168) {
System.out.println(i * i - 100);
}
}
}
}
}
41-42
package com.leetCode.demo02;
public class demo41 {
public static void main(String[] args) {
/*
* 打印1-1000的水仙花数 水仙花数:例如 153=1*1*1+5*5*5+3*3*3
*/
// 定义标记,水仙花数起始值位0
int count = 0;
// 要找出1000以内的水仙花数,先要遍历其每个数字;因为水仙花数是三位数所以从100开始
for (int i = 100; i < 1000; i++) {
// 取出个位
int g = i % 10;
// 取出十位
int s = i / 10 % 10;
// 取出百位
int b = i / 100;
// 判断每个位上的立方和是否等于它自己,如果是则打印出该数字
if (g * g * g + s * s * s + b * b * b == i) {
// 如果是水仙花数,count加一
count++;
System.out.println(i);
}
}
System.out.println("1000以内水仙花数的个数:" + count);
}
}
package com.leetCode.demo02;
import java.util.Scanner;
public class demo42 {
//幻方 注意return一维数组表示的幻方
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数");
int num = scanner.nextInt();
scanner.close();
// int[][] array = getHf(num);
// StringBuilder result;
// for (int i = 0; i < num; i++) {
// result = new StringBuilder();
// for (int j = 0; j < num; j++) {
// result.append(array[i][j]).append(" ");
// }
// System.out.println(result.toString().trim());
// }
int[] res=getHf(num);
for (int item :res ) {
System.out.print(item+",");
}
}
static int[] getHf(int num) {
int[][] array = new int[num][num];
int[] res = new int[num*num]; //用一维数组表示
int last_x = 0, last_y = num / 2;
// 肯定是奇数
array[0][last_y] = 1;
for (int i = 2; i <= num * num; i++) {
if (last_x == 0 && last_y != num - 1) {
last_x = num - 1;
++last_y;
} else if (last_x != 0 && last_y == num - 1) {
--last_x;
last_y = 0;
} else if (last_x == 0 && last_y == num - 1) {
++last_x;
} else if (array[last_x - 1][last_y + 1] == 0) {
--last_x;
++last_y;
} else {
++last_x;
}
array[last_x][last_y] = i;
}
int k=0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
res[k]=array[i][j];
k++;
}
}
return res;
}
}