首页 > 代码库 > 15年1月的每天小程序

15年1月的每天小程序

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);
		}

	}
}


15年1月的每天小程序