package package0530;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
import java.util.logging.Logger;
/**
* 本类主要用于练习java基础,放松放松
* @author xinxin
*/
public class FunctionClass {
static Logger log = Logger.getLogger("FunctionClass");
/*
* 程序1:
* 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对 兔子,假如兔子都不死,
* 问每个月的兔子总数为多少?
*/
public static int test1(int n){
//1 2 3 4 5 6 7 8 9
//1 1 2 3 5 8 13 21 34
int[] arr = new int[n+1];
arr[0] = 0;
arr[1] = 1;
for(int i = 2;i<=n;i++){
arr[i] = arr[i-2] + arr[i-1];
}
return arr[n]*2;
}
/*
* 程序2:
* 题目:判断101-200之间有多少个素数,并输出所有素数。
*/
public static void test2(){
for(int i = 101;i<=200;i++){
boolean b = true;
for(int j=2;j<i&&b;j++){
if(i % j ==0){
b = false;
}
}
if(b){
System.out.println("素数:"+i);
}
}
}
/*
* 程序3:
* 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,
* 其各位数字立方和等于该数本身。
* 例如:153是一个 "水仙花数 ",因为153=1的三次方+5的三次方+3的三次方。
*/
public static void test3(){
for(int i = 100;i<1000;i++){
int b = i/100;
int s = i%100/10;
int g = i%10;
if(i == b*b*b+s*s*s+g*g*g){
System.out.println("我是水仙花数:"+i);
}
}
}
/*
* 程序4:
* 题目:将一个正整数分解质因式。例如:输入90,打印出90=2*3*3*5;
* 思路:先求这个正整数的所有的质数
*/
public static void test4(int n){
List<Integer> li1 = new ArrayList<Integer>();
List<Integer> li2 = new ArrayList<Integer>();
//求所有质数
flag:for(int i=2;i<=n;i++){
for(int j=2;j<i;j++){
if(i%j==0){
continue flag;
}
}
li1.add(i);
}
//求所有质因数
for(Integer pn:li1){
int num1 = n%pn;
int num2 = n/pn;
while(num1==0){
li2.add(pn);
num1 = num2%pn;
num2 = num2/pn;
}
}
//处理逻辑,拼接字符串
StringBuilder sb = new StringBuilder();
sb.append(n+"=");
for(Integer pn:li2){
sb.append(pn+"*");
}
sb.deleteCharAt(sb.length()-1);
System.out.println(sb.toString());
}
/*
* 程序4:更好的答案
*/
public static void test4s(int n){
int k = 1;
System.out.println(n+"=");
while(k<=n){
if(k==n){
System.out.println(n);
break;
}else if(n%k==0){
System.out.print(k+"*");
n = n/k;
}else{
k++;
}
}
}
/*
* 程序5:
* 利用条件运算符的嵌套来完成此题:学习成绩 >=90分的同学用A表示,
* 60~89分之间用B表示,60分以下用C表示
*/
public static void test5(double d){
char c;
c = d>90 ? 'A' : (d>=60) ? 'B' : 'C';
System.out.println(c);
}
/*
* 程序6:
* 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
* 最大公约数记法:(a,b)
* 最小公倍数记法:[a,b]
*/
public static void test6(int m,int n){
int temp = n*m;
int t = 0;
while(m%n!=0){//辗转相除法
t = n;
n = m%n;
m = t;
}
System.out.println("最大公约数:"+n);
System.out.println("最小公倍数:"+temp/n);
}
/*
* 程序7:
* 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
*/
public static void test7(String str){
char[] ch = str.toCharArray();
int blank = 0;
int character = 0;
int number=0;
int other=0;
for(int i = 0;i<ch.length;i++){
if(ch[i] == ' '){
blank++;
}else if(('A'<=ch[i]&&ch[i]<='Z')||('a'<=ch[i]&&ch[i]<='z')){
character++;
}else if('0'<=ch[i]&&ch[i]<='9'){
number++;
}else{
other++;
}
}
System.out.println("字符串为:"+str);
System.out.println("英文字符个数:"+character);
System.out.println("空格的个数:"+blank);
System.out.println("数字的个数"+number);
System.out.println("其它字符的个数:"+other);
}
/*
* 程序8:
* 题目:求s = a + aa + aaa + aaaa +aa...a的值,其中a是一个数字。
* 例如: 2 + 22 + 222 + 2222 + 22222(此时共有5个数字相加)
* 几个数相加有键盘控制。
*/
/**
*
* @param a 相当于数字a
* @param n 一共 有多少个数字相加
*/
//2 3 2+22+222
public static void test8(int a,int n){
int temp = a,i=0,sum =0;
while(i<n){
sum = sum + temp;
temp = temp*10+a;
i++;
}
System.out.println("总和为:"+sum);
}
/*
* 程序9:
* 题目:一个数如果恰好等于它的因子之和,这个数就称为“完数”。
* 例如:6 = 1+2+3
* 请找出1000以内的所有完数。
*/
public static void test9(){
List<Integer> arr;
for(int i = 1;i<1000;i++){
arr = new LinkedList<Integer>();
for(int j=1;j<i;j++){
if(i%j==0) arr.add(j);
}
int sum = 0;
for(Integer in:arr){
sum +=in;
}
if(sum==i)
System.out.println("我是完数:"+i);
}
}
/*
* 程序10:
* 题目:一个球从100米高度落下,每次落地后反跳回原高度一半;
* 再落下,求他在第10次落地时,共经过多少米?第10次 反弹多高?
*/
/*
* 分析:
* 第1次落地:共经过 100 米,反弹 50 米;
* 第2次落地:共经过 200 米,反弹 25 米;
* 第3次落地:共经过 250 米,反弹 25/2 米;
* 第4次落地:共经过 275 米,反弹 25/2/2 米;
* 第5次落地:共经过 287.5 米,反弹 25/2/2/2 米;
*/
/**
* @param n 第几次落地
*/
public static void test10(int n){
double totalJournay = 100;
double reboundHeight = 0;
double initHeight = 100;
int kk = 1;
for(int i = 1;i<=n;i++){
kk *=2;
totalJournay += 2*reboundHeight;
reboundHeight = initHeight/kk;
}
System.out.println("第"+n+"次落地,共经过"+totalJournay+"米 , 反弹高度为"+reboundHeight);
}
/*
* 程序11:
* 题目:有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
*/
public static void test11(){
int count = 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){
System.out.println(i*100+j*10+k);
count++;
}
}
}
}
System.out.println("count:"+count);
}
/*
* 程序12:
* 题目:企业发的奖金根据利润提成。利润低于或等于10万元时,奖金可提10%;利润高于10万元,
* 低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40
* 万之间时,高于20万的部分,可提成5%;40万到60万之间时,高于40万的部分,可提成3%;
* 60万到100万之间时,高于60万的部分,可提成1.5%;高于100万元时,超过100万元的部分按
* 1%提成,从键盘输入当月利润,求应发放奖金总数?
*/
public static void test12(){
double salary = 0.0; //奖金
Scanner sc = new Scanner(System.in);
Double d = sc.nextDouble(); //利润
if(d<0){
try {
throw new Exception("你别输入负数啊,朋友!");
} catch (Exception e) {
System.err.println(e.getMessage());
return;
}
}
if(d<=10){
salary = d*0.1;
}else if(d<20){
salary = 10*0.1+(d-10)*0.075;
}else if(d<40){
salary = 10*0.1 + 10*0.075 + (d-20)*0.05;
}else if(d<60){
salary = 10*0.1 + 10*0.075 + 20*0.05 + (d-40)*0.03;
}else if(d<100){
salary = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + (d-60)*0.015;
}else{
salary = 10*0.1 + 10*0.075 + 20*0.05 + 20*0.03 + 40*0.015 +(d-100)*0.01;
}
DecimalFormat df = new DecimalFormat("#.0000");
System.out.println("当月应发奖金总额为"+df.format(salary)+"万元!");
System.out.println(String.format("%.4f", salary));
}
/*
* 程序13:
* 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,
* 请问该数是多少?
*/
public static void test13(){
int i = 0;
while(true){//写了一个死循环,看看后面怎么跑的
if(Math.sqrt(i+100)%1==0&&Math.sqrt(i+268)%1==0){
System.out.println(i);
}
i++;//i--;也行
}
}
/*
* 程序14:
* 题目:输入某年某月某日,判断这一天是这一年的第几天?
*/
public static void test14(int year,int month,int day){
int days = 0;
int sum = 0;
for(int i=1;i<month;i++){
switch(i){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if((year%400)==0||(year%4==0&&year%100!=0)){
days = 29;
}else{
days = 28;
}
break;
}
sum +=days;
}
System.out.println(year+"年"+month+"月"+day+"日 是这一年的第"+(day+sum)+"天!");
}
/*
* 程序15:
* 题目:输入3个整数x,y,z,请把这三个数从小到大输出。
*/
public static void test15(int x,int y,int z){
int[] arr = new int[]{x,y,z};
/*选择排序
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}*/
//冒泡排序
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
/*
* 程序16:
* 题目:输出9*9乘法口诀。
*/
public static void test16(){
System.err.println(" 9*9乘法口诀表");
System.out.println();
flag:for(int i=1;i<10;i++){
for(int j=1;j<10;j++){
if(i<j){
System.out.println();
continue flag;
}
System.out.print(i+"*"+j+"="+i*j+"\t");
}
}
}
//这种方法实现更方便
public static void test16s(){
for(int i = 1;i<10;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
if(i==j)
System.out.print("\n");
}
}
}
/*
* 程序17:
* 题目:猴子吃桃问题。猴子第一天摘下若干个桃子 ,当即吃了一半,
* 还不过瘾,又多吃了一个,第二天早晨又将剩下的桃子吃了一半,又多吃了
* 一个。以后每一天早晨都吃了前一天剩下的一半零一个。到第10天早晨想再
* 吃时,发现只剩下一个桃子了。求第一天共摘了多少?
*/
public static void test17(){
/*
* 10:1
* 9 :4
* 8 :10
* 7 :22
*/
int s = 1;
for(int i = 2;i<11;i++){
s = (s+1)*2;
}
System.out.println("第一天共摘了"+s+"个桃子!");
}
/*
* 程序18:
* 题目:两个乒乓球队比赛,各出三人。甲队为a,b,c三人,乙对为x,y,z三人。已抽签决定比赛名单。
* 有人向队员打听比赛的名单。a说 他不和x比,c不和x、z比。请编程,找出三队赛手的名单。
*/
/*
* a-->z
* b-->x
* c-->y
*/
public static void test18(){
for(char i ='x';i<='z';i++){
for(char j ='x';j<='z';j++){
for(char k ='x';k<='z';k++){
if(i!=j&&i!=k&&j!=k&&i!='x'&&k!='x'&&k!='z'){
System.out.println("a vs "+i+"||b vs "+j+"||c vs "+k);
}
}
}
}
}
/*
* 程序19:
* 题目:打印出如下图形(菱形)
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*/
public static void test19(){
//上半部分
for(int i= 1;i<=4;i++){
for(int j=4;j>i;j--){
System.out.print(" ");
}
for(int k=2*i-1;k>=1;k--){
System.out.print("*");
}
System.out.println();
}
//下半部分
for(int i=3;i>=1;i--){
for(int j=3;j>=i;j--){
System.out.print(" ");
}
for(int k=2*i-1;k>=1;k--){
System.out.print("*");
}
System.out.println();
}
}
/*
* 程序20:
* 题目:有一分数序列:2/1 , 3/2 ,5/3,8/5;13/8;21/13
* 求出这个数列前20项之和。
*/
public static void test20(){
double sum = 0;
double n1 = 2,n2 =1;
for(int i=1;i<=20;i++){
sum +=(double)n1/n2;
double t = n1;
n1 = n1 + n2;
n2 = t;
}
System.out.println(sum);
}
/*
* 程序21:
* 题目:求1+2!+3!+...+20!的和。
*/
public static void test21(){
long sum = 0;
for(int i=1;i<=20;i++){
long num = 1;
for(int j=1;j<=i;j++){
num *=j;
}
sum +=num;
}
System.out.println("总和为:"+sum);
}
/*
* 程序22:
* 题目:利用递归的方法求5!。
*/
public static int test22(int n){
if(n==1){
return 1;
}
return n*test22(n-1);
}
/*
* 程序23:
* 题目:有5个人坐在一起,问第五个人多少岁?
* 他说他比第四个人大2岁。问第四个人岁数,他说他比第三个人大2岁。
* 问第三个人,又说比第二个人大2岁。问第二个人,他说他比第一个人大2岁。
* 问第一个人,他说他是10岁。请问第五个人多大?
*/
public static void test23(){
int age = 10;
for(int i = 1;i<=5;i++){
age +=2;
}
System.out.println("第五个人岁数是 : "+age);
}
/*
* 程序24:
* 题目:给一个不多于5位的正整数,要求:
* 一、求它是几位数;
* 二、逆序打印各位数字。
*/
public static void test24(){
int num = (int)(Math.random()*99999+1);
System.out.println(num);
int len = Integer.toString(num).length();
LinkedList<Integer> link = new LinkedList<Integer>();
for(int i = 1;i<=len;i++){
int remainder = num%10;
link.add(remainder);
num = num/10;
}
System.out.println(link);
}
/*
* 程序25:
* 题目:一个五位数,判断它是不是回文数。即12321是回文数,个位
* 与万位相同,十位与千位相同。
*/
public static void test25(){
int num = (int)(Math.random()*90000+10000);
System.out.println(num);
String strNumber = Integer.toString(num);
if(strNumber.substring(0, 1).equals(strNumber.substring(4))&&strNumber.substring(1, 2).equals(strNumber.substring(3, 4))){
System.out.println(strNumber+"是回文数!");
}else{
System.out.println(strNumber+"不是回文数!");
}
}
/*
* 程序26:
* 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,
* 则继续判断第二个字母。
*/
/*
* monday
* tuesday
* wednesday
* thursday
* friday
* saturday
* sunday
*/
public static void test26() {
Scanner sc = new Scanner(System.in);
String str = sc.next().toLowerCase();
System.out.println("str :" + str);
char c = str.charAt(0);
String param = "";
char c2 = ' ';
switch (c) {
case 'm':
param = "星期一";
break;
case 'w':
param = "星期三";
break;
case 'f':
param = "星期五";
break;
case 't':
c2 = new Scanner(System.in).next().toLowerCase().charAt(0);
if (c2 == 'u')
param = "星期二";
if (c2 == 'h')
param = "星期四";
System.out.println("你输入 错了!");
break;
case 's':
c2 = new Scanner(System.in).next().toLowerCase().charAt(0);
if (c2 == 'a')
param = "星期六";
if (c2 == 'u')
param = "星期日";
System.out.println("你输入 错了!");
break;
default:
System.out.println("你输入 错了!");
}
System.out.println("你输入的字母"+c+c2+"对应的是"+param);
}
/*
* 程序27:
* 题目:求100之内的素数。
*/
public static void test27(){
flag:for(int i=2;i<=100;i++){
for(int j=2;j<=i-1;j++){
if(i%j==0){
continue flag;
}
}
System.out.println("100以内的素数有"+i);
}
}
/*
* 程序28:
* 题目:对十个数进行排序。
*/
public static void test28(){
int[] arr =new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100+1);
}
System.out.println(Arrays.toString(arr));
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int t = arr[j];
arr[j] = arr[j+1];
arr[j+1] = t;
}
}
}
System.out.println(Arrays.toString(arr));
}
/*
* 程序29:
* 题目:求一个3*3矩阵对角线元素之和
*/
public static void test29(){
int[][] arr = new int[3][3];
int sum = 0;
for(int i=0;i<=2;i++){
for(int j=0;j<=2;j++){
arr[i][j] = (int)(Math.random()*100+1);
System.out.print(arr[i][j]+"\t");
if(i==j||i+j==2){
sum +=arr[i][j];
}
}
System.out.println();
}
System.err.println("------------分割线----------------\n"+sum);
}
/*
* 程序30:
* 题目:有一个已经排好序的数组。现输入一个数,要求按照原来的规律将
* 它插入到数组中。
*/
public static void test30(){
//假设现在有一个长度为10的数组,不妨设该数组是倒序排列
int[] arr = new int[10];
for(int i=0;i<=9;i++){
arr[i] = (int)(Math.random()*30+1);
}
System.err.println(Arrays.toString(arr));
//这次我们用选择排序
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]<arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
//先随机生产一个数
int key = (int)(Math.random()*100+1);
System.out.println("key:"+key);
//假设我们不知道这个数组是正序还是到序
int[] targetArr;
if(arr[0]>=arr[9]){
System.out.println("这个数组是倒序排列的!");
targetArr = new int[arr.length+1];
System.out.println("targetArr长度:"+targetArr.length);
int i;
for(i=0;i<arr.length;i++){
if(arr[i]>key){
targetArr[i] = arr[i];
}else{
targetArr[i] = key;
break;
}
}
for(int j=i+1;j<targetArr.length;j++){
targetArr[j] = arr[j-1];
}
System.out.println("targetArr:"+Arrays.toString(targetArr));
}else{
System.out.println("这个数组是正序排列的!");//和上面同理
targetArr = new int[arr.length+1];
}
}
/*
* 程序31:
* 题目:将一个数组逆序输出。
*/
public static void test31(){
int[] arr1 = new int[10];
int[] arr2 = new int[10];
for(int i=0;i<arr1.length;i++){
arr1[i] = (int)(Math.random()*100+1);
}
System.out.println("arr1"+Arrays.toString(arr1));
for(int i=0;i<arr1.length;i++){
arr2[i] = arr1[9-i];
}
System.out.println("arr2"+Arrays.toString(arr2));
}
/*
* 程序32:
* 题目:取一个整数a从右端开始的4~7位。
*/
/*
* 分析:
* 这个整数a应该大于7位才有意义,随机生成一个7位数吧
*/
public static void test32(){
int num = (int)(Math.random()*9000000+1000000);
System.out.println(num);
String str = Integer.toString(num);
char[] ch = str.toCharArray();
int i = 0;
System.out.println(ch);
while(i<ch.length/2){
char c = ch[i];
ch[i] = ch[ch.length-1-i];
ch[ch.length-1-i] = c;
i++;
}
System.out.println(ch);
String s="";
for(int j=3;j<=6;j++){
s += ch[j];
}
System.out.println("结果是"+s);
}
/*
* 程序33:
* 题目:打印出杨辉三角
*/
public static void test33(){
for(int i=1;i<=10;i++){
}
}
/*
* 程序34:
* 题目:输入三个数a,b,c,按大小顺序输出。(不妨有小到大吧)
*/
public static void test34(){
Scanner sc = new Scanner(System.in);
System.out.println("请按顺序输入a,b,c:");
int a = sc.nextInt();
int b = sc.nextInt();
int c = sc.nextInt();
System.out.println("a="+a+", b="+b+", c="+c);
if(a>=b){
if(c>=a){
System.out.println(b+" "+a+" "+c);
}else{
if(c<=b){
System.out.println(c+ " "+b+" "+a);
}else{
System.out.println(b+" "+c+" "+a);
}
}
}else{ //a<b
if(c>=b){
System.out.println(a+" "+b+" "+c);
}else
if(c<=a) System.out.println(c+" "+a+" "+b);
else System.out.println(a+" "+c+" "+b);
}
}
/*
* 程序35:
* 题目:输入数组,最大与第一个元素交换,最小与最后一个元素交换,输出数组。
*/
public static void test35(){
//随机生成一个长度为8的数组
int[] arr = new int[8];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*30+1);
}
System.out.println(Arrays.toString(arr));
int max = arr[0],min = arr[0];
int a=0,b=0;
for(int i=1;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
a = i;
}
if(min>arr[i]){
min = arr[i];
b = i;
}
}
System.out.println("max="+max+",a = "+a);
System.out.println("min="+min+",b = "+b);
if(arr[0]!=arr[a]){
int temp = arr[0];
arr[0] = arr[a];
arr[a] = temp;
}
if(arr[arr.length-1]!=arr[b]){
int temp =arr[arr.length-1];
arr[arr.length-1] = arr[b];
arr[b] = temp;
}
System.out.println(Arrays.toString(arr));
}
/*
* 程序36:
* 题目:有n个整数,使其前面各数顺序向后移动m个位置,最后m个数变成最前面的m个数。
*/
public static void test36(int len,int m){
int st = m;
int[] arr1 = new int[len];
int[] arr2 = new int[len];
int j=0;
for(int i=0;i<arr1.length;i++){
arr1[i] = (int)(Math.random()*100+1);
if(m<len){
arr2[m] = arr1[i];
m++;
}
if(i>=arr2.length-st){
arr2[j] = arr1[i];
j++;
}
}
System.out.println("arr1"+Arrays.toString(arr1));
System.out.println("arr2"+Arrays.toString(arr2));
}
/*
* 程序37:
* “约瑟夫环”问题
* 题目:有n个人围成一个圈,顺序排号。从第一个人开始报数(从1到3报数),凡是报3
* 的人退出圈子,问最后留下来的人是原来的第几号?
*/
public static void test37(int n){
List<Integer> list = new LinkedList<Integer>();
for(int i=0;i<n;i++){
list.add(i+1);
}
System.out.println(list);
int index = -1;
while(list.size()>1){
index = (index+3)%list.size();
list.remove(index--);
}
System.out.println(list.get(0));
}
/*
* 程序38:
* 题目:写一个函数,求一个字符串的长度.
*/
public static void test38(String str){
if(str==null){
try {
throw new Exception("你输入的数字字符串为空!");
} catch (Exception e) {
System.err.println(e.getMessage());
return;
}
}
char[] ch = str.toCharArray();
System.out.println(Arrays.toString(ch));
System.out.println(ch.length);
}
/*
* 程序39:
* 题目:编写一个函数,输入n为偶数时,调用函数求
* 1/2+1/4+...+1/n;当输入n为奇数时,调用函数
* 1/1+1/3+...+1/n
*/
public static void test39(){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
double d = 0;
if(n%2==0){
for(int i=1;i<=n/2;i++){
d +=(double)1/(2*i);
}
}else{
for(int i=1;i<=n;i++){
if(i%2!=0){
d +=(double)1/i;
}
}
}
System.out.println(d);
}
/*
* 程序40:
* 题目:给一组字符串排序。
*/
public static void test40(){
Set<String> set = new TreeSet<String>();
set.add("abc");
set.add("abb");
set.add("bbb");
set.add("ccc");
System.out.println(set);
}
/*
* 程序41:
* 题目:海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为5份,多了一个,
* 这只猴子把多的一个扔进海中,拿走了一份。第二只猴子把剩下的桃子又平均分成5份,又多了
* 一个,它同样把多的一个扔进海中,拿走了一份。第三、第四、第五只猴子都是这样做的,问海滩上
* 原来有多少只桃子?
*/
public static void test41(){
int i=1;
while(i<10000){
int temp = i;
int count = 1;
for(int j=1;j<=5;j++){
if((temp%5)==1){
temp = (int) ((temp-1)*0.8);
count++;
if(count==6){
System.out.println(i);
break;
}
}
}
i++;
}
}
/*
* 程序42:
* 题目:809*?? = 800*??+9*??
* 其中??代表的两位数,8*??的结果为两位数,9*??的结果为3位数。
* 求??代表的两位数,及809*??的结果。
*/
public static void test42(){
for(int i =10;i<=99;i++){
if(809*i==(800*i+9*i) && (8*i>=10 && 8*i<100)&& (9*i>=100 && 9*i<1000)){
System.out.println(i);
}
}
}
/*
* 程序43:
* 题目:求0-7所能组成的奇数的个数。
* 改为:求0-7所能组成的奇数的个数。(各个位数上的数字不能重复)
*/
public static void test43(){
//4 4*6 4*6*6 4*6*6*5 4*6*6*5*4 4*6*6*5*4*3
//4*6*6*5*4*3*2
long lon = 0L;
for(int i=8;i>0;i--){
if(i==8)
lon = 4;
if(i==7)
lon = lon+4*6;
lon +=lon*i;
}
System.out.println(lon);
}
/*
* 程序44:
* 题目:一个偶数总能表示为两个素数之和。
* 转换为:随机生成一个大于等于8的偶数,然后求
* 它的质数,并且它的质数和等于这个数字。
*/
public static void test44(){
int targetNumber = 0;
while(true){
targetNumber = (int)(Math.random()*100+1);
if(targetNumber>=8 && targetNumber%2==0) break;
}
System.out.println(targetNumber);
flag:
for(int i=2;i<targetNumber;i++){
if(i%2==1 && ((targetNumber-i)%2==1)){
for(int j=2;j<i;j++){
if(i%j==0){
continue flag;
}
}
for(int j=2;j<targetNumber-i;j++){
if((targetNumber-i)%j==0){
continue flag;
}
}
System.out.println(i+" "+(targetNumber-i));
}
}
}
/*
* 程序45:
* 题目:判断一个整数能被几个9整除。
*/
public static void test45(int num){
int count=0;
while(num%9==0){
count++;
num /=9;
}
System.out.println(num+" 能被 "+count+"个9整除!");
}
/*
* 程序46:
* 题目:两个字符串连接。
*/
public static void test46(){
Scanner sc = new Scanner(System.in);
String str1 = sc.nextLine();
String str2 = sc.nextLine();
StringBuilder sb = new StringBuilder();
sb.append(str1).append(str2);
String str = sb.toString();
System.out.println(str);
}
/*
* 程序47:
* 题目:读取7个数(1-50)的整数值,每读取一个值,程序打印出该值的个数* 。
*/
public static void test47(){
Scanner sc = new Scanner(System.in);
for(int i=0;i<7;i++){
int temp = sc.nextInt();
if(!(temp>=1&&temp<=50)){
System.out.println("请输入1-50的数字");
return;
}
for(int j=1;j<=temp;j++){
System.out.print("*");
}
System.out.println();
}
}
/*
* 程序48:
* 题目:某个公司采用公用电话传递数据,数据是4位的整数,在传递过程中是加密的,加密规则如下,
* 每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。
*/
public static void test48(int num){
System.out.println("未加密前的数据是 num :"+num);
String regex = "[1-9][0-9]{3}";
String temp = Integer.toString(num);
if(!(temp.matches(regex))){
try {
throw new Exception("该数字不是4位整数");
} catch (Exception e) {
System.err.println(e.getMessage());
return;
}
}
int g = num%10;
int s = num/10%10;
int b = num/100%10;
int q = num/1000;
int[] arr = {q,b,s,g};
for(int i=0;i<arr.length;i++){
arr[i] +=5;
arr[i] %=10;
}
// System.out.println(Arrays.toString(arr));
for(int i=0;i<arr.length/2;i++){
int t = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = t;
}
System.out.print("加密后的数据是 num :");
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]);
}
}
/*
* 程序49:
* 题目:计算字符串中子字符串出现的次数。
*/
public static void test49(String fatherStr,String sonStr){
String[] strArr = fatherStr.split(sonStr);
System.out.println(strArr.length-1);
}
/*
* 程序50:
* 题目:有5个学生,每个学生有三门课的成绩,从键盘输入以上数据(包括学生号、姓名、
* 三门课成绩),计算出平均成绩,把原有的数据和计算出的平均分数存放在磁盘文件“stud”中,
*/
public static void test50() throws IOException{
List<String> list = new LinkedList<String>();
Scanner sc = new Scanner(System.in);
String temp = null;
for(int k=0;k<=4;k++){
System.out.println("请输入有学号、姓名、语文成绩、数学成绩、外语成绩:");
temp = sc.nextLine();
String[] strArr = temp.split("\\、");
double dou = 0.0,avg=0.0;
for(int i=2;i<strArr.length;i++){
dou += Double.parseDouble(strArr[i]);
}
avg = dou/3;
list.add(temp+"、"+avg);
System.out.println(temp+"、"+avg);
}
System.out.println(list);
File file = new File("C:\\Users\\xinxin\\Desktop\\stud.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
for(String s:list){
bw.write(s+"\r\n");
}
bw.flush();
bw.close();
}
}