package lianxi;
import java.util.Scanner;
/**
* * @author Administrator *9-13号练习 * */public class Lx09_13 {public static void main(String[] args) {
//1.用二维数组输出9*9乘法表 //chengfabiao01();//用二维数组输出9*9乘法表 /*2.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?(兔子的规律为数列1,1,2,3,5,8,13,21....)这也是著名的斐波那契数列。*/ //tuzi02(); //3.1-100之间有多少个素数,并输出所有素数及素数的个数。 //sushu03(); //4.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6 = 1+2+3.找出10000以内的所有完数。 //wanshu04(); //5.将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出。 //shuzu_zhuanbian05(); //6.编程打印杨辉三角。 //yanghui_sanjiao06(); //7.求近似Pi值。可以用公式(如:pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+.....) //pi07(); //8、判断某一年是否是闰年。(1949-2017年的闰年,同时输出闰月月份) //runnian08();//没有输出闰月月份?000 //9.获得某年、某月的最大天数。 //maxday09(); //10.输入某年某月某日,判断这一天是这一年的第几天? //whichDay10(); //11.求一个数的阶乘。 jiecheng11();//12. 将10进制的数转换为2进制输出
// jinzhi12(); /*13.猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 程序分析:采取逆向思维的方法,从后往前推断。 */ //taozi13(); } /*13.猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。 程序分析:采取逆向思维的方法,从后往前推断。 */ private static void taozi13() { int[] a = new int[10]; a[0]=1;//第10天有一个 //每天的桃子数加1乘以2是前一天的桃子数 for(int i=1;i<a.length;i++) { a[i] = (a[i-1]+1)*2; } System.out.print("第一天的桃子数:"+a[a.length-1]); } //12. 将10进制的数转换为2进制输出 private static void jinzhi12() { Scanner y=new Scanner(System.in);//构造一个Scanner对象,其传入参数为System.in System.out.print("请输入十进制数:"); int n=y.nextInt();//读取一个十进制数值 int[] a=new int[32]; int k=1; for(int i=1;n/2!=0;i++) { a[i-1]=n%2; n=n/2; k=i; } a[k]=1;//二进制最高位 System.out.print("2进制数是:");//输出转化后的2进制数 for(int i=k;i>=0;i--) { System.out.print(a[i]); } }//11.求一个数的阶乘。
private static void jiecheng11() { Scanner y=new Scanner(System.in);//构造一个Scanner对象,其传入参数为System.in System.out.print("请输入数字:"); int n=y.nextInt();//指定是哪个具体数 int s=1; for(int i=1;i<=n;i++) { s=s*i; } System.out.println("阶乘是:"+s); } //10.输入某年某月某日,判断这一天是这一年的第几天 private static void whichDay10() { int[] a= {31,28,31,30,31,30,31,31,30,31,30,31};//存平年中每月的天数 int sum=0;//记录是本年中的第几天 int y=2014;//年 int m=1;//月 int d=4;//日 //先计算本月以前平年的所有天数,在判断是否是闰年的2月,是的话就在2月份之后都加一天,最后再加上本月的天数 for(int i=1;i<m;i++) { sum+=a[i-1]; } if(m>2) { if(y%4==0 && y%100!=0|| y%100==0 && y%400==0 ) { sum=sum+1; } } sum=sum+d;//加上本月天数 System.out.println("是本年的第"+sum+"天"); } //9.获得某年、某月的最大天数。 private static void maxday09() { int month=2,year=2001;//设置为某年某月 int k = 0; //平年中每月的最大天数 switch(month) { case 1: k=31;break; case 2: k=28;break; case 3: k=31;break; case 4: k=30;break; case 5: k=31;break; case 6: k=30;break; case 7: k=31;break; case 8: k=31;break; case 9: k=30;break; case 10: k=31;break; case 11: k=30;break; case 12: k=31;break; default:System.out.println("请重新输入"); } //如果是闰年,2月份加一天,并输出某年某月的最大天数 if(year%4==0 && year%100!=0 && month ==2 || year%100==0 && year%400==0 && month ==2 ) { System.out.println("最大天数是:"+k+1); }else { System.out.println("最大天数是:"+k); } }//8、判断某一年是否是闰年。(1949-2017年的闰年,同时输出闰月月份)
//闰年是:能被4整除而不能被100整除,或者能被100整除也能被400整除。 private static void runnian08() { for(int i=1949;i<2018;i++) { if(i%4==0 && i%100!=0 || i%100==0 && i%400==0 ) { System.out.println(i+"年是闰年"); }else continue; } } //7.求近似Pi值。可以用公式(如:pi/2 = 1+1/3+1/3*2/5 + 1/3*2/5*3/7 + 1/3*2/5*3/7*4/9+.....) private static void pi07() { double s=1; double pi=1; int n=111; for(int i=1;i<n;i++) { s=i*s/(2*i+1); pi=pi+s; } System.out.println("pi="+2*pi); }
//6.编程打印杨辉三角。
private static void yanghui_sanjiao06() { int[][] a = new int[5][]; for(int i=0;i<a.length;i++) { a[i] = new int [i+1];//行数等于每行的元素个数 } a[0][0]=1;//第一行数赋值为1 for(int i=1;i<a.length;i++) { a[i][0]=1;//将每行第一个数设为1 for(int j=1;j<a[i].length-1;j++) { a[i][j] = a[i-1][j-1]+a[i-1][j]; } a[i][a[i].length-1]=1;//将每行最后一个数设为1 } //输出杨辉三角。 System.out.println("杨辉三角:"); for(int i=0;i<a.length;i++) { for(int j=0;j<a[i].length;j++) { System.out.print(a[i][j]); } System.out.print("\n"); } }
//5.将一个4×4的数组进行逆时针旋转90度后输出,要求原始数组的数据随机输入,新数组以4行4列的方式输出。 private static void shuzu_zhuanbian05() { int[][] a = { {1,2,3,4},{1,2,3,4},{1,2,3,4},{1,2,3,4}}; //输出原数组 System.out.print("输出原数组\n"); for(int i=0;i<4;i++) { for(int j=0;j<4;j++) { System.out.print(a[i][j]+" "); } System.out.print("\n"); } //输出转后的数组 System.out.print("输出转后的数组\n"); for(int j=3;j>=0;j--) { for(int i=0;i<4;i++) { System.out.print(a[i][j]+" "); } System.out.print("\n"); } }
//4.一个数如果恰好等于它的因子之和,这个数就称为“完数”。例如6 = 1+2+3.找出10000以内的所有完数。
private static void wanshu04() {int m=0;//记录每个数的因子数之和
for(int i=2;i<10000;i++) {
m=0;//每次都把因子总数初始化为0 for(int j=1;j<i;j++) { if(i%j==0) { m=j+m; } } if(m == i) { System.out.println("完数:"+m); } } }//1-100之间有多少个素数,并输出所有素数及素数的个数。 /*思路: * i从1到100取值,j取值是从2到i-1,第二个for循环去判断i是否是素数, * 如果是素数,就输出该i值,计算器加1,如果不是素数九跳到L1处,从新循环判断 */ private static void sushu03() { int c=0;//定义计数器,计算素数的个数 L1: for(int i=1;i<101;i++) { for(int j=2;j<i;j++) { if(i%j == 0) { continue L1; } } System.out.print(i+" "); c++; } System.out.print("\n"+c); } /*古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子, 假如兔子都不死,问每个月的兔子总数为多少?(兔子的规律为数列1,1,2,3,5,8,13,21....)这也是著名的斐波那契数列。*/ private static void tuzi02() { int[] a = new int[9]; //前两个月赋初值为1 a[0]=1; a[1]=1; //计算第三个月之后的值 for(int i=2;i<a.length;i++) { a[i]=a[i-1]+a[i-2]; } //输出每个月的兔子数 for(int i=0;i<a.length;i++) { System.out.print(a[i]+" "); } }
//用二维数组输出9*9乘法表 private static void chengfabiao01() { int[][] a = new int[9][9];//定义一个9行的二维数组 //用for循环打印输出,i控制行数,j控制每行的列数 for(int i=0;i<a.length;i++) { for(int j=0;j<i+1;j++) { System.out.print((i+1)+"*"+(j+1)+"="+(i+1)*(j+1)+" "); } System.out.println("\n");//每行结束后换行 } }
}