package everyworkdayprogramming._2015_1_04;
public class Java_1_4 {
/**
*
*
* 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。
*
*
*/
public static void main(String[] args) {
int bit = 0, ten = 0, hun = 0;
for (int n = 100; n < 1000; n++) {
if (n < 1000) {
bit = n % 10; // 个位数,例如123除以10的余数是3
ten = n % 100 / 10; /*
* 十位数,例如123除以100的余数是23,再除以10就是2
* 也可以这样获得十位数,例如
* 123/10=12,然后12%10=2,这样也是获得了十位数
*/
hun = n / 100; // 百位数,例如123/100就是1
if (bit * bit * bit + ten * ten * ten + hun * hun * hun == n) {
System.out.println(n);
}
}
}
}
}
package everyworkdayprogramming._2015_1_05;
public class Java_1_5 {
/**
*
*
* 编写一个应用程序,对程序中给定的四个double型数据求其最大值和最小值。
*
*
*/
public static void main(String[] args) {
double[] numbers = { -3.1, 4.5, -6.6, 9.2 };
double max = numbers[0];
double min = numbers[0];
for (int i = 1; i < numbers.length; i++) {
if (max < numbers[i]) {
max = numbers[i];
}
if (min > numbers[i]) {
min = numbers[i];
}
}
System.out.println("max_________>" + max + "min______________>" + min);
}
}
package everyworkdayprogramming._2015_1_06;
public class Java_1_6 {
/**
*
* 一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6的因子为1、2、3,
* 而6=1+2+3。因此6是“完数”。编写一个小应用程序求1000之内的所有完数
*
*/
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
// 求和的循环过程中,有一个初始值为0的和值。 自我认为程序中的求和更应该是累加的过程
int a = 0;
// 一个能整除某个数的数必然小于等于这个数的一半(除了该数本身)
for (int j = 1; j <= i / 2; j++) {
if (i % j == 0) {
a += j;
}
}
if (a == i) {
System.out.println(i);
}
}
}
}
package everyworkdayprogramming._2015_1_07;
import java.math.BigDecimal;
public class Java_1_7 {
/**
* 要求1000!(1000*999*998...*2*1)的值。
*
* 这个值比较大,所以需要用到BigDecimal
*/
public static void main(String[] args) {
BigDecimal baseNum = new BigDecimal(1);
for (int i = 1; i <= 1000; i++) {
BigDecimal b = new BigDecimal(i);
baseNum = baseNum.multiply(b);
}
System.out.println("1000的阶乘是------------------------>" + baseNum);
}
}
package everyworkdayprogramming._2015_1_08;
public class Java_1_8 {
/**
*
*
* 设计一个能随机产生100个大写英文字母的方法,在该方法中统计产生了多少个元音字母,并输出这个数字。
*
*/
public static void main(String[] args) {
char[] ch = new char[100];
int count = 0;
System.out.println("一百个随机产生的大写字母为:");
System.out.println("----------------------------------------------------------------------------------------------------------------");
for (int i = 0; i < 100; i++) {
int a = (int) (Math.random() * 26);
ch[i] = (char) (a + 65);
System.out.print(ch[i] + "\t ");
if ((i + 1) % 10 == 0) {
System.out.println();
}
}
System.out.println("----------------------------------------------------------------------------------------------------------------");
// 统计原音个数
for (int i = 0; i < 100; i++) {
if (ch[i] == 'A' || ch[i] == 'E' || ch[i] == 'I' || ch[i] == 'O'
|| ch[i] == 'U') {
count++;
}
}
System.out.println("原音字母的个数为:" + count);
}
}
package everyworkdayprogramming._2015_1_09;
import java.util.Scanner;
public class Java_1_9 {
private static Scanner scanner;
/**
*
* 有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第3个月后每个月 又生一对兔子,假如兔子不死,问每个月的兔子总数为多少?
*
*/
public static void main(String[] args) {
scanner = new Scanner(System.in);
System.out.println("请输入月数");
int m = scanner.nextInt();
System.out.println("第一个月的兔对数为1");
System.out.println("第二个月的兔对数为1");
int f1 = 1, f2 = 1, f;
for (int i = 3; i <= m; i++) {
f = f2; //中间变量的记录作用
f2 = f2 + f1;
f1 = f;
System.out.println("第" + i + "个月的兔子对数: " + f2);
}
}
}
package everyworkdayprogramming._2015_1_10;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Java_1_10 {
/**
*
*
* 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
*
*/
public static void main(String[] args) throws IOException {
BufferedReader buf;
String str;
int a = 0, b = 0, c = 0, d = 0;
buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一串字符:");
str = buf.readLine();
char ch[] = str.toCharArray();
for (int i = 0; i < ch.length; i++) {
if ((ch[i] >= 'a' && ch[i] <= 'z')
|| (ch[i] >= 'A' && ch[i] <= 'Z'))
a++;
else if (ch[i] >= '0' && ch[i] <= '9')
b++;
else if (ch[i] == ' ')
c++;
else
d++;
}
System.out.println("英文字母有:" + a + "个");
System.out.println("数字有:" + b + "个");
System.out.println("空格有:" + c + "个");
System.out.println("其它字符有:" + d + "个");
}
}
package everyworkdayprogramming._2015_1_12;
public class Java_1_12 {
/**
*
*
* 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一 个 第二天早上又将剩
* 下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下 的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
*
*/
public static void main(String[] args) {
int sum = 1;
for (int i = 0; i < 9; i++) {
sum = (sum + 1) * 2;
}
System.out.println(sum);
}
}
package everyworkdayprogramming._2015_1_13;
public class Java_1_13 {
/**
* @Title: main
* @Description: 利用递归方法求5!
* @param @param args 设定文件
* @return void 返回类型
* @throws
* @author mpc
*/
public static void main(String[] args) {
System.out.println(getFactorial(5));
}
public static int getFactorial(int num) {
if (num == 1) {
return 1;
} else {
return getFactorial(num - 1) * num;
}
}
}
package everyworkdayprogramming._2015_1_14;
import java.util.Scanner;
public class Java_1_14 {
/**
*
* @Title: main
* @Description: 求一个3*3矩阵对角线元素之和.
* @param @param args 设定文件
* @return void 返回类型
* @throws
* @author mpc
*/
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入9个整数:");
int[][] number = new int[3][3];
int s1 = 0, s2 = 0;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
number[i][j] = scanner.nextInt();
}
}
System.out.println("输入的矩阵为:");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(number[i][j] + "\t");
}
System.out.println();
System.out.println();
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (i == j)
s1 += number[i][j];
if (i + j == 2)
s2 += number[i][j];
}
}
System.out.println("主对角线的和为:" + s1);
System.out.println("反对角线的和为:" + s2);
}
}
package everyworkdayprogramming._2015_1_15;
import java.util.Scanner;
/**
* @ClassName: Java_1_15
* @Description: 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。
* @author mpc
* @date 2015年1月15日 上午8:58:10
*
*/
public class Java_1_15 {
public static void main(String[] args) {
int x = 10;
int max = 0, min = 0;
int maxb = 0, minb = 0, temp = 0;
System.out.println("请输入数组的大小:");
Scanner scanner = new Scanner(System.in);
x = scanner.nextInt();
int num[] = new int[x];
System.out.println("输入数组中的数值");
for (int i = 0; i < num.length; i++) {
num[i] = scanner.nextInt();
}
max = min = num[0];
System.out
.println("-------------------------------------------------------");
for (int i = 0; i < num.length; i++) {
if (max < num[i]) {
maxb = i;
}
if (min > num[i]) {
minb = i;
}
}
temp = num[0];
num[0] = num[maxb];
num[maxb] = temp;
temp = num[num.length - 1];
num[num.length - 1] = num[minb];
num[minb] = temp;
System.out.println(maxb + " " + minb);
for (int n : num) {
System.out.print(n);
}
}
}
package everyworkdayprogramming._2015_1_16;
public class Java_1_16 {
/**
*
* 定义复数的类Complex并测试其功能: 1. 复数由实部、虚部两个部分组成,在类的定义中应包含保存这两部分信息的内容。
* 2. 在类中定义构造函数,使用户能够在构造对象的同时为对象赋初值。
* 3. 在类中定义复数的加法、减法、乘法三个二元操作符来完成复数间的加、减、乘的功能。
* 4. 通过重载tosthing,使得Complex类的对象能够显示其自身信息。
* 5. 通过显示定义一个成员函数完成对象的赋值操作,使用户能够对Complex类的 对象进行赋值。
* 6. 编写一段主程序(main函数),使用户能够通过这段主程序输入复数并进行复数 的计算。
*
*/
public static void main(String[] args) {
Complex complex1;
Complex complex2;
complex1 = initialComplex(12, 3);
complex2 = initialComplex(16, 3);
System.out.println(complex1.toString());
System.out.println(complex2.toString());
Complex sum = Complex.additive(complex1, complex2);
System.out.println(sum.toString());
Complex sub = Complex.subtraction(complex1, complex2);
System.out.println(sub.toString());
Complex multi = Complex.multiplication(complex1, complex2);
System.out.println(multi.toString());
}
public static Complex initialComplex(float a, float b) {
return new Complex(a, b);
}
}
class Complex {
private float a;
private float b;
public float getA() {
return a;
}
public void setA(float a) {
this.a = a;
}
public float getB() {
return b;
}
public void setB(float b) {
this.b = b;
}
public Complex(float a, float b) {
super();
this.a = a;
this.b = b;
}
public Complex() {
}
public static Complex additive(Complex... c) {
if (c.length == 2) {
return new Complex(c[0].a + c[1].a, c[0].b + c[1].b);
} else {
return null;
}
}
public static Complex subtraction(Complex... c) {
if (c.length == 2) {
return new Complex(c[0].a - c[1].a, c[0].b - c[1].b);
} else {
return null;
}
}
public static Complex multiplication(Complex... c) {
if (c.length == 2) {
return new Complex(c[0].a * c[1].a + c[0].b * c[1].b, c[0].a
* c[1].b - c[0].b * c[1].a);
} else {
return null;
}
}
@Override
public String toString() {
if (a == 0 && b != 0) {
return b + "i";
} else if (a != 0 && b == 0) {
return a + "";
} else if (a == 0 && b == 0) {
return "0";
} else if (b < 0) {
return a + "+" + "(" + b + ")i";
} else {
return a + "+" + b + "i";
}
}
}
package everyworkdayprogramming._2015_1_17;
public class Java_1_17 {
/**
*
*
* 求100之内的素数
*
*
* */
public static void main(String[] args) {
boolean flag = false;
System.out.print("100以内的素数有:2 3 ");
for (int i = 3; i <= 100; i += 2) {
//这块的开平方比较难理解,假设a*b=n;
//对n开根号,如果有a大于根号下n,必然有b小于根号下n,
//比如a=5,b=4,n=20,根号下n大概等于4点多,那你判断20是不是
//素数的时候对4取余都已经判断出来了,那还用对5取余判断吗
int n = (int) Math.sqrt(i);
for (int j = 2; j <= n; j++) {
if (i % j == 0) {
flag = false;
break;
} else
flag = true;
}
if (flag == true) {
System.out.print(i + " ");
}
}
}
}
package everyworkdayprogramming._2015_1_19;
import java.util.Scanner;
public class Java_1_19 {
/**
*
* 从键盘上输入10个整数,并将其放入一个一维数组中,然后将其前5个元素与后
* 5个元素对换,即:第1个元素与第10个元素互换,第2个元素与第9个元素互换
* …第5个元素与第6个元素互换。分别输出数组原来各元素的值和对换后各元素的值。
*
*
* */
public static void main(String[] args) {
int arr[] = new int[10];
int temp = 0;
Scanner scanner = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
for (int i = 0; i < arr.length / 2; i++) {
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
for (int a : arr) {
System.out.println(a);
}
}
}
package everyworkdayprogramming._2015_1_20;
import java.util.Scanner;
public class Java_1_20 {
/**
*
* 随便输入一段字符串,把出现次数最多的打印出来,如:aabbbbbbbbbcccdffff,就把b 打印出来,用java代码实现
*
* */
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请随意输入一串字符。。。");
String input = scanner.nextLine();
char[] ch = input.toCharArray();
int number[] = new int[ch.length];
for (int i = 0; i < number.length; i++) {
int count = 0;
for (int j = 0; j < number.length; j++) {
if (ch[i] == ch[j]) {
count++;
}
}
number[i] = count;
}
int max = number[0];
int k = 0;
for (int i = 0; i < number.length; i++) {
if (max < number[i]) {
max = number[i];
k = i;
}
}
System.out.println("出现次数最多的字符为:" + ch[k]);
}
}
package everyworkdayprogramming._2015_1_21;
public class Java_1_21 {
/**
*
* 给定N是一个正整数,求比N大的最小“不重复数”,这里的不重复是指没有两个相等的相邻位,如1102中的11是相等的两个相邻位故不是不重复数,
* 而12301是不重复数。
*
* */
public static void main(String[] args) {
System.out.println(getMinNotRep(112310 + 1));
}
public static int getMinNotRep(int number) {
int[] nums = new int[9];
int len = 0;
boolean flag = true;
int b = 0;
// 把要处理的数字的各个位保存到数组中去
while (number > 0) {
nums[len++] = number % 10;
number = number / 10;
}
for (int i = len - 1; i > 0; i--) {
// 如果遇到重复位,就把重复位中次高位加1
if (flag && nums[i] == nums[i - 1]) {
nums[i - 1]++;
flag = false;
} else if (flag == false) {
// 把重复位中次高位后的数字都变成 ...0101010101 的形式
nums[i - 1] = b;
b = (b == 0) ? 1 : 0;
}
}
for (int i = len - 1; i >= 0; i--) {
number = number * 10 + nums[i];
}
if (flag) {
return number;
} else {
return getMinNotRep(number);
}
}
}
package everyworkdayprogramming._2015_1_22;
public class Java_1_22 {
/**
*
*
* 设N是一个大整数,求长度为N的字符串的最长回文子串。
*
*
* */
public static void main(String[] args) {
System.out
.println(getMaxSubPalindromeString("2321323sdsadaaabbbbbaaafkljdsfjkdsjkfljdslkjflkjdslkfjlkds"));
}
public static String getMaxSubPalindromeString(String str) {
char[] ch = str.toCharArray();
boolean p[][] = new boolean[ch.length][ch.length];
// 初始化标记数组
for (int i = 0; i < p.length; i++) {
for (int j = 0; j < p[i].length; j++) {
p[i][j] = true;
}
}
for (int len = 2; len <= ch.length; len++) {
for (int i = 0; i < ch.length - len + 1; i++) {
int j = i + len - 1;
if (len == 2) {
p[i][j] = ch[i] == ch[j];
} else {
p[i][j] = (p[i + 1][j - 1] && (ch[i] == ch[j]));
}
}
}
int maxLength = 1;
int maxI = 0;
for (int i = 0; i < ch.length; i++) {
for (int j = 0; j < ch.length; j++) {
if (p[i][j] && maxLength < j - i + 1) {
maxLength = j - i + 1;
maxI = i;
}
}
}
return new String(ch, maxI, maxLength);
}
}
package everyworkdayprogramming._2015_1_23;
public class Java_1_23 {
/**
*
*
* 有1、2、3、4这几个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*
*
* */
public static void main(String[] args) {
int count = 0;
for (int i = 1; i < 5; i++) {
for (int j = 1; j < 5; j++) {
for (int k = 1; k < 5; k++) {
if (i != j && j != k && k != i) {
count++;
System.out.print(i * 100 + j * 10 + k+" ");
}
}
}
}
System.out.println("总数为-------->" + count);
}
}
package everyworkdayprogramming._2015_1_24;
public class Java_1_24 {
/**
*
*
* 爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,每步上2阶,最后剩1
* 阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶
* ;只有每步上7阶,最后一阶也不剩。请问该阶梯至少有多少阶。编写一个Java程序解决该问题。
*
*
* */
public static void main(String[] args) {
int n = 7;
while (true) {
if (n % 2 == 1 && n % 3 == 2 && n % 5 == 4 && n % 6 == 5
&& n % 7 == 0)
break;
n += 7;
}
System.out.println(n);
}
}
package everyworkdayprogramming._2015_1_26;
public class Java_1_26 {
/**
*
*
* 有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3 的人退出圈子,问最后留下的是原来第几号的那位。
*
*
* */
public static void main(String[] args) {
int n = 5;
boolean flag[] = new boolean[n];
for (int i = 0; i < flag.length; i++) {
flag[i] = true;
}
int left = n, count = 0, index = 0;
while (left > 1) {
if (flag[index] == true) {
count++;
if (count == 3) {
count = 0;
flag[index] = false;
left--;
}
}
index = (++index) % (n);
}
for (int i = 0; i < n; i++) {
if (flag[i] == true) {
System.out.println("留下来的有" + i);
}
}
}
}
package everyworkdayprogramming._2015_1_27;
public class Java_1_27 {
/**
*
*
* 哥德巴赫猜想是说任何一个大于2的偶数都能表示为两个素数之和。请编写一个
* Java程序,验证1~100内哥德巴赫猜想的正确性,也就是近似证明哥德巴赫猜想。
*
*
* */
public static void main(String[] args) {
boolean flag = false;
int number[] = new int[25];
number[0] = 2;
number[1] = 3;
int a = 2;
System.out.print("100以内的素数有:");
for (int i = 3; i <= 100; i += 2) {
for (int j = 2; j <= (int) Math.sqrt(i); j++) {
if (i % j == 0) {
flag = false;
break;
} else {
flag = true;
}
}
if (flag == true) {
number[a] = i;
a++;
}
}
for (int i = 0; i < number.length; i++) {
System.out.print(number[i] + " ");
}
System.out.println();
for (int i = 2; i <= 100; i += 2) {
for (int j = 0; j < number.length - 1; j++) {
for (int k = j + 1; k < number.length; k++) {
if (i == number[j] + number[k]) {
System.out.println(i + "=" + number[j] + "+"
+ number[k]);
}
}
}
}
}
}
package everyworkdayprogramming._2015_1_28;
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.util.Properties;
public class Java_1_28 {
/**
*
* 通过配置文件运行类中的方法
*
* */
public static void main(String[] args) throws Exception {
FileInputStream file = new FileInputStream("d:/show.txt");
Properties pro = new Properties();
pro.load(file);
file.close();
// 通过键值对获取对应的类名和方法名
String className = pro.getProperty("className");
String methodName = pro.getProperty("methodName");
// 通过反射获得字节码对象和方法对象
Class<?> demo = Class.forName(className);
Object o = demo.newInstance();
Method method = demo.getMethod(methodName, null);
method.invoke(o, null);
}
}
package everyworkdayprogramming._2015_1_29;
import java.util.Scanner;
public class Java_1_29 {
/**
*
* 随即输入QQ号:校验QQ号码:不能以0开头 是5-15位的数字
*
*
* ******使用正则表达式
* */
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String qq = scanner.nextLine();
String segex = "[^0][0-9]{4,14}";
boolean flag = qq.matches(segex);
if (flag) {
System.out.println(qq);
} else {
System.out.println("格式错误");
}
}
}
package everyworkdayprogramming._2015_1_30;
import java.util.TreeSet;
public class Java_1_30 {
/**
*
* 能将这些ip地址排序。按照地址段数值从小到大排序。
* "192.168.3.23 202.10.34.2 3.3.3.3 127.0.0.1 80.12.23.34" 思路
* ip地址都是字符串,所有字符串排序,用TreeSet。 如果用TreeSet 现在存在每个ip 地址,就会有问题。因为有部分ip没有满足三位。
* 这样比较是有问题的, 所有,我们采取补位的方式 1:先给每个 ip地址的每一个位在前面补2个0。 2:把超出3位的数据,截取成3位。
*
* */
public static void main(String[] args) {
String str = "192.168.3.23 202.10.34.2 3.3.3.3 127.0.0.1 80.12.23.34";
// 先补2个0
str = str.replaceAll("(\\d+)", "00$1");
System.out.println(str);
// 去掉超出3位的前面的0
str = str.replaceAll("0*(\\d{3})", "$1");
System.out.println(str);
String[] ips = str.split(" ");
TreeSet<String> ts = new TreeSet<String>();
for (String s : ips) {
ts.add(s);
}
for (String s : ts) {
s = s.replaceAll("0*(\\d+)", "$1");
System.out.println(s);
}
}
}