java编程定义一个表示学生信息的类student_要求如下_Java学习---程序设计_基础题[1]...

180813 补全没有的答案!

0、 数组排序大全[冒泡/选择/快速/插入]

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 importjava.util.ArrayList;7 importjava.util.Arrays;8 importjava.util.Collections;9 importjava.util.Iterator;10 importjava.util.List;11

12 /**

13 * 排序算法复习14 *@author小a玖拾柒15 * Date: 2018年8月18日16 * 【更多参考】https://blog.csdn.net/snow_5288/article/details/60140265

17 */

18

19 public classTest2018 {20

21 public static void main(String[] args) throwsIOException {22 BufferedReader br = new BufferedReader(newInputStreamReader(System.in));23 List l = null;24 System.out.println("[eg.]请输入数据,如:1,12,32,2,3");25 String input =br.readLine();26 //方案一: 多数排序

27 check(input);28 //方案二: 冒泡排序

29 check2(input);30 //方案三: 快速选择排序

31 check3(input);32 //方案四: 插入排序

33 check4(input);34 //方案五: 快速排序

35 check5(input);36 }37

38 //方案一: list排序:利用Collections工具类实现

39 public static voidcheck(String str){40 String[] s = str.split(",");41 int[] ch = new int[s.length];42 List list = new ArrayList();43 for(int i = 0; i < s.length; i++){44 ch[i] =Integer.parseInt(s[i]);45 list.add(ch[i]);46 }47 Collections.sort(list);48 System.out.println("【方案一】list排序 :" +list);49

50 }51 //方案二: 冒泡排序: 相邻2个数字比较,一次排序后最大/最小的数字排列最后

52 /**

53 * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。54 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。55 针对所有的元素重复以上的步骤,除了最后一个。56 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。57 冒泡排序需要n-1(i)趟冒泡,每趟冒泡需要比较n-1-i(j)次比较,总共的比较次数为(n-1)+(n-2)+……+1,58 所以冒泡排序算法最坏情况和平均复杂度是O(n²)。59 由于占用空间有限,冒泡排序的空间复杂度为O(1)。60 */

61 public static voidcheck2(String str){62 String[] s = str.split(",");63 int[] ch = new int[s.length];64 for(int i = 0; i < s.length; i++){65 ch[i] =Integer.parseInt(s[i]);66 }67 for(int i = 1; i < ch.length; i++){68 for(int j = 0; j < ch.length; j++){69 if(ch[i]

79 /**

80 * 是直观的排序,通过确定一个Key最大或最小值,再从带排序的的数中找出最大或最小的交换到对应位置。再选择次之81 * 双重循环时间复杂度为O(n^2)82 */

83 public static voidcheck3(String str){84 String[] s = str.split(",");85 int[] ch = new int[s.length];86 for(int i = 0; i < s.length; i++){87 ch[i] =Integer.parseInt(s[i]);88 }89 for(int i = 0; i < ch.length; i++){90 for(int j = i+1; j < ch.length ; j++){91 if(ch[i] >ch[j]){92 int tmp =ch[i];93 ch[i] =ch[j];94 ch[j] =tmp;95 }96 }97 }98 System.out.println("【方案三】选择排序后:" +Arrays.toString(ch));99 }100 //方案四: 插入排序:往前比较,如果当前数比前一个小则进行第二个循环操作,反之则直接进入下次外层循环101 //比冒泡更优秀一点,冒泡是无论大小都会继续比较,这里是如果当前数字比前面的小,交换位置[降序则反之即可]

102 public static voidcheck4(String str){103 String[] s = str.split(",");104 int[] ch = new int[s.length];105 for(int i = 0; i < s.length; i++){106 ch[i] =Integer.parseInt(s[i]);107 }108 for(int i = 1; i < ch.length; i++){109 int tmp =ch[i];110 //升序: 如果前面的数字比当前的tmp大,则交换位置

111 for(int j = i - 1; j >=0 && tmp < ch[j]; j--){112 ch[j+1] =ch[j];113 ch[j] =tmp;114 }115 }116 System.out.println("【方案四】插入排序后:" +Arrays.toString(ch));117 }118 //方案五:快速排序:选择一个基准,大于该值放在右侧,小于则放在左侧

119 /**

120 * 选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。一般选择序列的第一个元素。121 一次循环:从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果没有继续比较下一个,直到找到第一个比基准值小的值才交换。找到这个值之后,又从前往后开始比较,如果有比基准值大的,交换位置,如果没有继续比较下一个,直到找到第一个比基准值大的值才交换。直到从前往后的比较索引>从后往前比较的索引,结束第一次循环,此时,对于基准值来说,左右两边就是有序的了。122 接着分别比较左右两边的序列,重复上述的循环。123 快速排序是一种快速的分而治之的算法,它是已知的最快的排序算法,其平均运行时间为O(N*1ogN) 。它的速度主要归功于一个非长紧凑的并且高度优化的内部循环。但是他也是一种不稳定的排序,当基准数选择的不合理的时候他的效率又会编程O(N*N)。124 快速排序的最好情况: 快速排序的最好情况是每次都划分后左右子序列的大小都相等,其运行的时间就为O(N*1ogN)。125 快速排序的最坏情况: 快速排序的最坏的情况就是当分组重复生成一个空序列的时候,这时候其运行时间就变为O(N*N)126 快速排序的时间复杂度为O(N*lgN),快速排序的空间复杂度为O(lgN).127 */

128 public static voidcheck5(String str){129 String[] s = str.split(",");130 int[] ch = new int[s.length];131 for(int i = 0; i < s.length; i++){132 ch[i] =Integer.parseInt(s[i]);133 }134 if(ch.length <=1) return;135 int start = 0;136 int end = ch.length-1;137 check5sort(ch, start, end);138 System.out.println("【方案五】快速排序后:" +Arrays.toString(ch));139 }140

141 public static void check5sort(int[] a,int low,inthigh){142 int start =low;143 int end =high;144 int key = a[low]; //设定基准为第一个数字

145

146

147 while(end>start){148 //从后往前比较

149 while(end>start&&a[end]>=key) //如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较

150 end--;151 if(a[end]<=key){152 int temp =a[end];153 a[end] =a[start];154 a[start] =temp;155 }156 //从前往后比较

157 while(end>start&&a[start]<=key)//如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置

158 start++;159 if(a[start]>=key){160 int temp =a[start];161 a[start] =a[end];162 a[end] =temp;163 }164 //此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用

165 }166 //递归

167 if(start>low) check5sort(a,low,start-1); //左边序列。第一个索引位置到关键值索引-1

168 if(end

169 }170 }

View Code

0、 实现会员注册,要求用户名长度不小于3,密码长度不小于6,注册时两次输入密码必须相同

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6

7

8 //实现会员注册,要求用户名长度不小于3,密码长度不小于6,注册时两次输入密码必须相同

9

10 public classTest2018 {11 public static voidmain(String[] args) {12 Boolean flag = true;13 while(flag){14 try{15 System.out.println("请输入姓名:");16 String name = new BufferedReader(newInputStreamReader(System.in)).readLine();17 if(name == null || "".equals(name)){18 System.out.println("输入为空,请重新输入!");19 continue;20 }21 if(name.length() < 3){22 System.out.println("输入用户名长度不得小于3,请重新输入!");23 continue;24 }25 System.out.println("请输入密码:");26 String passwd = new BufferedReader(newInputStreamReader(System.in)).readLine();27 if(passwd == null || "".equals(passwd)){28 System.out.println("输入为空,请重新输入!");29 continue;30 }31 if(passwd.length() < 6){32 System.out.println("输入密码长度不得小于6,请重新输入!");33 continue;34 }35 System.out.println("请再次输入密码:");36 String passwd2 = new BufferedReader(newInputStreamReader(System.in)).readLine();37 if(passwd2 == null || "".equals(passwd2)){38 System.out.println("输入为空,请重新输入!");39 continue;40 }41 if(passwd.length() == passwd2.length() &&passwd.equals(passwd2)){42 System.out.println("注册成功,欢迎您!");43 flag = false;44 break;45 }else{46 System.out.println("2次输入的密码不一致,请重新注册!");47 continue;48 }49

50 } catch(IOException e) {51 //TODO Auto-generated catch block

52 e.printStackTrace();53 }54 }55

56 }57 }

View Code

1、 一个景区根据游人的年龄收取不同价格的门票。请编写游人类,根据年龄段决定能够购买的门票价格并输出,然后写出测试类测试该类

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 importjava.util.ArrayList;7 importjava.util.List;8

9 //实现会员注册,要求用户名长度不小于3,密码长度不小于6,注册时两次输入密码必须相同

10

11 public classTest2018 {12 public static voidmain(String[] args) {13 Boolean flag = true;14 String name = null;15 String info = null;16 List list = new ArrayList<>();17 int price = 120;18 int age = 0;19

20 while(flag) {21 try{22 System.out.println("请输入游客的姓名:");23 name = new BufferedReader(newInputStreamReader(System.in)).readLine();24 if (name == null || "".equals(name)) {25 System.out.println("输入为空,请重新输入!");26 continue;27 }28 System.out.println("请输入游客的年龄:");29 age = Integer.parseInt(new BufferedReader(newInputStreamReader(System.in)).readLine());30 if (age < 0 || age > 100) {31 System.out.println("输入错误,请从新输入");32 continue;33 }34 info = "游客信息: 姓名[" + name + "]" + ", age[" + age + "]";35 if(age < 18){36 int pri = price / 2;37 info = info + ",门票:" +pri;38 }else if(age < 60){39 int pri =price;40 info = info + ",门票:" +pri;41 }else{42 info = info + ",门票:" + "免费";43 }44 list.add(info);45 System.out.println("是否继续售票[Y/N] ?");46 String con = new BufferedReader(newInputStreamReader(System.in)).readLine();47 if(con.toUpperCase().equals("Y") || con.equals("Y")){48 flag = true;49 }else{50 flag = false;51 for(String string : list) {52 System.out.println(string);53 System.out.println("------------------------------");54 }55 }56 } catch(IOException e) {57 e.printStackTrace();58 }59

60 }61

62 }63 }

View Code

2、 编写一个Java程序,用if-else语句判断某年份是否为闰年

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 //Programme Name LeapYear.java

2

3 public classLeapYear{4

5 public static voidmain(String args[]){6

7 int year=2010;8

9 if(args.length!=0)10

11 year=Integer.parseInt(args[0]);12

13 if((year%4==0 && year%100!=0)||(year%400==0))14

15 System.out.println(year+" 年是闰年。");16

17 else

18

19 System.out.println(year+" 年不是闰年。");20

21 }22

23 }//if-else语句

View Code

3、编写一个Java程序在屏幕上输出1!+2!+3!+……+10!的和

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classForTest {2

3 public static voidmain( String args[] ) {4

5 int i,j,mul,sum=0;6

7 for(i=1;i<=10;i++) {8

9 mul=1;10

11 for(j=1,j<=i;j++) {12

13 mul=mul*j;14

15 }16

17 sum=sum+mul;18

19 }20

21 System.out.println(“1!+2!+3!+……+10!= ”+sum);22

23 }24

25 }

View Code

5、编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个函数分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 import java.io.*;2

3 public classStrinput4

5 {6

7 public static voidmain(String args[]) {8

9 String s1,s2,ss,si,sf;10

11 inti1,i2;12

13 floatf1,f2;14

15 BufferedReader strin=new BufferedReader(newInputStreamReader(System.in));16

17 try{System.out.print ("输入第一个字符串:");18

19 s1=strin.readLine();20

21 System.out.print ("输入第二个字符串:");22

23 s2=strin.readLine();}24

25 catch(Exception e){ System.out.println(e.getMessage());}26

27 i1 =Integer.parseInt(s1);28

29 i2 =Integer.parseInt(s2);30

31 f1 =Float.parseFloat(s1);32

33 f2 =Float.parseFloat(s2);34

35 ss =strAdd(s1,s2);36

37 si =strAdd(i1,i2);38

39 sf =strAdd(f1,f2);40

41 System.out.println ("输入的二个字符串相加结果为:"+ss );42

43 System.out.println ("输入字符串转换为整数相加结果为:"+si );44

45 System.out.println ("输入字符串转换为浮点数相加结果为:"+sf );46

47 }48

49 String strAdd(String str1,String str2) {50

51 return str1+str2;52

53 }54

55 String strAdd(int int1,intint2) {56

57 return String.valueOf(int1+int2);58

59 }60

61 String strAdd(float flt1,floatflt2) {62

63 return String.valueOf (flt1+flt2);64

65 }66

67 }

View Code

6. 应用FileInputStream类,编写应用程序,从磁盘上读取一个Java程序,并将源程序代码显示在屏幕上。(被读取的文件路径为:E:/myjava/Hello.java)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 import java.io.*;2

3 public classFISDemo {4

5 public static voidmain(String args[]) {6

7 byte[] buf=new byte[2056];8

9 try{10

11 FileInputStream fileIn=new FileInputStream("e:/myjava/Hello.java");12

13 int bytes=fileIn.read(buf,0,2056);14

15 String str=new String(buf,0,bytes);16

17 System.out.println(str);18

19 }catch(Exception e){20

21 e.printStackTrace( );22

23 }24

25 }

View Code

7、编写一个Java程序将当100,101,102,103,104,105个数以数组的形式写入到Dest.txt文件中,并以相反的顺序读出显示在屏幕上

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 import java.io.*;2

3 public classIODemo {4

5 public static voidmain( String args[] ) {6

7 int data[] = {100,101,102,103,104,105};8

9 intt;10

11 try

12

13 { DataOutputStream out = new DataOutputStream (newFileOutputStream(“dest.txt”));14

15 for(int i=0;i

17 out.WriteInt(data[i]);18

19 out.close();20

21 DataInputStream in = new DataInputStream (newFileInputStream(“dest.txt”));22

23 for(int i= data.length-1;i>= 0;i--) {24

25 t=in.readInt(data[i]);26

27 System.out.print(“ ”+t);28

29 }30

31 System.out.println( );32

33 in.close();34

35 }catch(IOException e)36

37 { System.out.println(e.getMessage());}38

39 }40

41 }

View Code

9、编写一个Java程序实现多线程,在线程中输出线程的名字,隔300毫秒输出一次,共输出20次。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 //声明一个子线程类Threaddemo;

2

3 class ThreadDemo extendsThread {4

5 publicThreadDemo(String str) {6

7 super(str);8

9 }10

11 public voidrun() {12

13 for(int i=0;i<20;i++){14

15 System.out.print(“ ”+this.getName());16

17 Try {18

19 Sleep(300);20

21 }catch(InterruptedException e){22

23 System.out.println(e.getMessage());24

25 Return;26

27 }28

29 }30

31 System.out.println(“ /end”);32

33 }34

35 }36

37 public classTestThread {38

39 public static voidmain( String args[] ) {40

41 ThreadDemo thread1=newThreadDemo(“T1”);42

43 ThreadDemo thread2=newThreadDemo(“T2”);44

45 ThreadDemo thread3=newThreadDemo(“T3”);46

47 thread1.start();48

49 thread2.start();50

51 thread3.start();52

53 }54 }

View Code

10. 编写程序,在屏幕上显示带标题的窗口,并添加一个按钮。当用户单击按钮时,结束程序。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 import javax.swing.*;2

3 import java.awt.event.*;4

5 public class ButtonEventDemo extends JPanel implementsActionListener{6

7 protected JButton b1; //声明一个按钮对象

8

9 public ButtonEventDemo() { //构造方法

10

11 ImageIcon ButtonIcon = new ImageIcon("images/green.png"); //创建按钮的图标对象

12

13 b1 = new JButton("退出按钮", ButtonIcon); //生成按钮对象

14

15 b1.setMnemonic(KeyEvent.VK_E); //设置b1的助记符是Alt+E

16

17 b1.setToolTipText("这是退出按钮。"); //设置按钮提示条

18

19 this.add(b1); //往面板对象中加载按钮

20

21 b1.addActionListener(this); //本类对象注册为按钮的事件监听器

22

23 }24

25 public void actionPerformed(ActionEvent e){ //按钮事件响应方法

26

27 System.exit(0); //按b1则退出主程序

28

29 }30

31 private static void createGUI() { //创建窗体

32

33 JFrame.setDefaultLookAndFeelDecorated(true); //设置java隐含观感

34

35 JFrame frame = new JFrame("按钮测试"); //生成应用程序主窗体

36

37 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置关闭时隐含操作

38

39 ButtonEventDemo CPane = new ButtonEventDemo(); //生成主类对象--面板

40

41 CPane.setOpaque(true); //面板要求不透明

42

43 frame.setContentPane(CPane); //设置主类对象为主窗体的内容面板

44

45 frame.pack(); //主窗体紧缩显示

46

47 frame.setVisible(true); //设置主窗体可见

48

49 }50

51 public static void main(String[] args) { //将createGUI()列入线程

52

53 javax.swing.SwingUtilities.invokeLater(newRunnable() {54

55 public voidrun() {56

57 createGUI();58

59 }60

61 });62

63 }64

65 }

View Code

11、定义一个表示学生信息的类Student,要求如下:

(1)类Student的成员变量:

sNO 表示学号;sName表示姓名;sSex表示性别;sAge表示年龄;sJava:表示Java课程成绩。

(2)类Student带参数的构造方法:

在构造方法中通过形参完成对成员变量的赋值操作。

(3)类Student的方法成员:

getNo():获得学号;

getName():获得姓名;

getSex():获得性别;

getAge()获得年龄;

getJava():获得Java 课程成绩

(4)根据类Student的定义,创建五个该类的对象,输出每个学生的信息,计算并输出这五个学生Java语言成绩的平均值,以及计算并输出他们Java语言成绩的最大值和最小值。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 public classStudent {2

3 String sNO,sName,sSex;4

5 intsAge,sJava;6

7 public Student(String XH,String XM,String XB,int NL,intXF) {8

9 super();10

11 sNO=XH;12

13 sName=XM;14

15 sSex=XB;16

17 sAge=NL;18

19 sJava=XF;20

21 }22

23 publicString getNO() {24

25 returnsNO;26

27 }28

29 publicString getName() {30

31 returnsName;32

33 }34

35 publicString getSex() {36

37 returnsSex;38

39 }40

41 public intgetAge() {42

43 returnsAge;44

45 }46

47 public intgetJava() {48

49 returnsJava;50

51 }52

53 public static voidmain(String[] args) {54

55 Student[] st=new Student[5];56

57 st[0]=new Student("09zc01","张三","男",19,94);58

59 st[1]=new Student("09zc02","李四","男",20,85);60

61 st[2]=new Student("09zc03","王五","女",18,96);62

63 st[3]=new Student("09zc04","赵六","男",17,90);64

65 st[4]=new Student("09zc05","杨七","女",21,88);66

67 int max=0,min=100,sum=0;68

69 System.out.println(" 学生信息:");70

71 for (int i=0;i

73 if (st[i].sJava

75 min=st[i].sJava;76

77 if (st[i].sJava >max)78

79 max=st[i].sJava;80

81 sum=sum+st[i].sJava;82

83 System.out.println("学生编号:"+st[i].getNO()+", 姓名:"+st[i].getName()+", 性别:"+st[i].getSex()+", 年龄:"+st[i].getAge()+", Java课学分:"+st[i].getJava());84

85 }86

87 System.out.println();88

89 System.out.println(" 共有学生:"+st.length+", 平均成绩:"+sum/st.length);90

91 System.out.println(" 最小学分:"+min+", 最大学分:"+max);92

93 }94

95 }

View Code

12. 100~200内的素数判断

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.ArrayList;4 importjava.util.List;5 /**

6 判断101-200之间有多少个素数,并输出所有素数。7 *1.程序分析:判断素数的方法:用一个数分别去除2~sqrt(n)或者2~n/2,常用2~n/2,8 *因为一个数的一半的平方大于其本身是从5开始的,解方程:n/2的平方>n .如果能被整除【取余运算】,9 *则表明此数不是素数,反之是素数。10 *11 *@author小a玖拾柒12 * Date: 2018年8月18日13 *14 */

15 public classTest2018 {16 public static voidmain(String[] args) {17 List list = new ArrayList();18 for(int i = 100; i < 200; i++){19 if(isPrimeNumber(i)){20 list.add(i);21 }22 }23 System.out.println("100~200 共有" + list.size() + "个数字");24 System.out.println(list);25 }26 public static boolean isPrimeNumber(intnum){27 boolean flag = true;28 if(num == 2) returnflag;29 for(int i = 2; i <= num/2; i++){30 if(num % i == 0){31 flag = false;32 returnflag;33 }34 }35 returnflag;36 }37 }

View Code

13. 水仙花问题

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.ArrayList;4 importjava.util.List;5 /**

6 题目:打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:7 153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。8 1.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。9 *10 *@author小a玖拾柒11 * Date: 2018年8月18日12 *13 */

14 public classTest2018 {15 public static voidmain(String[] args) {16 //方案一

17 List list = new ArrayList();18 for(int i = 100; i < 999; i++){19 if(i ==isPrimeNumber(i)){20 list.add(i);21 }22 }23 System.out.println("【方案一】100~999 共有" + list.size() + "个水仙花");24 System.out.println(list);25 System.out.println("-------------------------------------------");26 //方案二:

27 List list2 = new ArrayList();28 for(int i = 100; i < 999; i++){29 if(i ==isPrimeNumber2(i)){30 list2.add(i);31 }32 }33 System.out.println("【方案二】100~999 共有" + list2.size() + "个水仙花");34 System.out.println(list2);35 System.out.println("-------------------------------------------");36 //方案三:

37 List list3 = new ArrayList();38 for(int i = 100; i < 999; i++){39 if(i ==isPrimeNumber2(i)){40 list3.add(i);41 }42 }43 System.out.println("【方案三】100~999 共有" + list3.size() + "个水仙花");44 System.out.println(list2);45 }46 //方案一: 直接拆分数字

47 public static int isPrimeNumber(intnum){48 int sum = 0;49 int bai = num / 100;50 int shi = num /10 % 10;51 int ge = num % 10;52 sum = (int) (Math.pow(bai, 3) + Math.pow(shi, 3) + Math.pow(ge, 3));53 returnsum;54 }55 //方案二: 利用String来切割数字

56 public static int isPrimeNumber2(intnum){57 String sth =String.valueOf(num);58 int sum = 0;59 int bai = Integer.parseInt(String.valueOf(sth.charAt(0)));60 int shi = Integer.parseInt(String.valueOf(sth.charAt(1)));61 int ge = Integer.parseInt(String.valueOf(sth.charAt(2)));62 sum = (int) (Math.pow(bai, 3) + Math.pow(shi, 3) + Math.pow(ge, 3));63 //System.out.println("百" + bai + "十" + shi + "个" + ge);

64 returnsum;65 }66 //方案三: 数字计算的优化

67 public static int isPrimeNumber3(intnum){68 String sth =String.valueOf(num);69 int sum = 0;70 for(int i = 0; i < sth.length(); i++){71 sum += Math.pow(Integer.parseInt(String.valueOf(sth.charAt(i))), 3);72 }73 //System.out.println("百" + bai + "十" + shi + "个" + ge);

74 returnsum;75 }76 }

View Code

14.分解质因数

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.ArrayList;4 importjava.util.List;5 /**

6 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。7 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:8 (1)运用两层循环。9 (2)外循环得到2~n之间的所有质数,内循环将n循环除以质数,知道不能整除。10 (3)要是内循环n等于1了就说明n被完全整除了。11 *12 *@author小a玖拾柒13 * Date: 2018年8月18日14 *15 */

16 public classTest2018 {17 public static voidmain(String[] args) {18 check(180);19 }20

21 public static boolean isPrimeNumber(intn){22 if(n == 2) return true;23 for(int i=2; i<=n/2; i++){24 if(n % i == 0) return false;25 }26 return true;27 }28 public static void check(intnum){29 StringBuffer sb = newStringBuffer();30 sb.append(num+"=");31 //这里一定是小于等于,耗时30mins+

32 for(int i = 2; i <= num; i++){33 //System.out.print("质数:" + i+"\t");

34 if(isPrimeNumber(i)){35 while(num%i==0){36 sb.append(i);37 num = num /i;38 if(num == 1) break;39 sb.append("*");40 }41 }else{42 continue;43 }44 }45 System.out.println("\n" +sb);46 }47 }

View Code

15. 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.Scanner;4 /**

5 * 求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。6 * 2 = 2 * 10^07 * 22 = 2 * 10^1 + 28 * 222= 2 * 10^2 + 229 *@author小a玖拾柒10 * Date: 2018年8月18日11 *12 */

13

14 public classTest2018 {15 public static voidmain(String[] args) {16 int n = 0; //中间

17 int num = 0; //键盘输入的数字

18 int sum = 0; //求和

19 int fac = 0; //中间值

20 int roate = 0; //循环次数

21 boolean flag = true;22 while(flag){23 Scanner scan = newScanner(System.in);24 System.out.println("请输入一个数组[0-9]:");25 num =scan.nextInt();26 if(num < 0 || num > 9){27 System.out.println("输入错误,请重新输入");28 continue;29 }30 System.out.println("请输入循环次数[10以内]:");31 roate =scan.nextInt();32 if(roate >= 10 || roate <=0){33 System.out.println("输入错误,请重新输入");34 continue;35 }36 flag = false;37 }38 StringBuffer sb = newStringBuffer();39 for(int j = 0; j < roate; j++){40 n = (int)Math.pow(10, j) *num;41 fac +=n;42 sb.append(fac).append("+");43 sum +=fac;44 }45 System.out.println(sum + "=" + sb.substring(0, sb.length()-1));46 }47 }

View Code

16. 求完数,数字=因子之和

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.Scanner;4 /**

5 题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程 找出1000以内的所有完数。6 *@author小a玖拾柒7 * Date: 2018年8月18日8 *9 */

10

11 public classTest2018 {12 public static voidmain(String[] args) {13 for(int i=1; i<1000; i++){14 if(isWanShu(i)){15 System.out.print(i + ",");16 }17 }18 }19

20 private static boolean isWanShu(inta) {21 int cup = 0;22 for(int i=1; i

View Code

17. 弹球高度计算

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.Scanner;4 /**

5 一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?6 1 1007 2 508 3 259 4 12.510 5 6.2511 6 3.12512

13 *@author小a玖拾柒14 * Date: 2018年8月18日15 *16 */

17

18 public classTest2018 {19 public static voidmain(String[] args) {20 //方案一: 直接计算

21 int sum = 0;22 double height= 100;23 for(int i = 2; i < 11 ; i++){24 //因为第一次是100米,第二次50米,

25 sum +=height;26 height = height/2;27 }28 System.out.println("第十次:" +height);29 System.out.println("总路程:" +sum);30

31 //方案二: 递归解决

32 System.out.println(height(100, 10));33

34 }35

36 public static double height(double h, intn){37 if(n==2) return h/2;38 else return height(h/2,n-1);39 }40 }

View Code

18. 排列组合[互不相同且无重复数字的三位数]

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.List;4 importjava.util.Vector;5 /**

6 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?7

8 *@author小a玖拾柒9 * Date: 2018年8月18日10 *11 */

12

13 public classTest2018 {14 public static voidmain(String[] args) {15 int[] arr = {1,2,3,4};16 int tmp = 0;17 List list = new Vector<>();18 for(int i = 0; i < 4; i++){19 for(int j = 0; j < 4; j++){20 if(arr[i] !=arr[j]){21 for(int k = 0; k < 4; k++){22 if(arr[i] != arr[k] && arr[j] !=arr[k]){23 tmp = 100 * arr[i] + 10 * arr[j] +arr[k];24 list.add(tmp);25 }26 }27 }28 }29 }30 System.out.println("共有:" +list.size());31 for(int i = 0; i < list.size(); i++){32 if(i % 7 != 0){33 System.out.print(list.get(i) + "\t");34 }else{35 System.out.println();36 }37 }38 }39 }

View Code

19. 完全平方数

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**

4 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?5 1. 任何数对1取余数都是06

7 *@author小a玖拾柒8 * Date: 2018年8月18日9 *10 */

11

12 public classTest2018 {13 public static voidmain(String[] args) {14

15 for(int i = 0; i < 1000; i++){16 if(Math.sqrt(i + 100) % 1 == 0 && Math.sqrt(i + 268) % 1 == 0){17 System.out.println(i);18 }19 }20 }21 }

View Code

20. 输出9*9口诀

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**

4 * 输出9*9口诀5 *@author小a玖拾柒6 * Date: 2018年8月18日7 */

8

9 public classTest2018 {10

11 public static voidmain(String[] args) {12 for(int i = 1; i <=9; i++){13 for(int j = 1; j <=i; j++){14 System.out.print(i + "*" + j + "=" + (i * j)+"\t");15 }16 System.out.println();17 }18 }19 }

View Code

21. 猴子偷桃

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**

4 *猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。5 *以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。6 1.程序分析:采取逆向思维的方法,从后往前推断(递归)7 day1: 18 day2: (1+1)*2 = 49 day3: (4+1)*2 = 1010 day4: (10+1)*2 = 2211 day5: (22+1)*2 = 4612 *@author小a玖拾柒13 * Date: 2018年8月18日14 */

15

16 public classTest2018 {17

18 public static voidmain(String[] args) {19 //方案一: 循环解决

20 int n = 1;21 int sum = 1;22 for(int i = 2; i <= 5; i++){23 n = ( n + 1 ) * 2;24 }25 System.out.println("方案一:" +n);26 //方案二: 递归

27 System.out.println("方案二:" + getNum(5));28 }29

30 public static int getNum(intd){31 int sum = 0;32 if(d==1) return 1;33 //这里实际上就是题目说的,前一天的量吃完一半后还余一个的算法

34 else return (getNum(d-1) + 1) * 2;35

36 }37

38

39 }

View Code

22. 乒乓球比赛名单

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**

4 两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队为x,y,z三人。5 已抽签决定比赛名单。有人向队员打听比赛的名单。a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。6 *@author小a玖拾柒7 * Date: 2018年8月18日8 */

9

10 public classTest2018 {11

12 public static voidmain(String[] args) {13 char[] a = {'a', 'b', 'c'};14 char[] b = {'x', 'y', 'z'};15 //方案一:

16 for(int i = 0; i < 3; i++){17 for(int j = 0; j < 3; j++){18 if(a[i] == 'a' && b[j] != 'x'){19 System.out.println(a[i] + "--->" +b[j]);20 }else if(a[i] == 'c' && b[j] != 'x' && b[j] != 'z'){21 System.out.println(a[i] + "--->" +b[j]);22 }else if(a[i] == 'b'){23 System.out.println(a[i] + "--->" +b[j]);24 }25 }26 }27 System.out.println("==============");28 //方案二:

29 for(int i = 0; i < 3; i++){30 for(int j = 0; j < 3; j++){31 if(a[i] == 'a' && b[j] == 'x'){32 continue;33 }else if(a[i] == 'c' &&( b[j] == 'x' || b[j] == 'z')){34 continue;35 }else{36 System.out.println(a[i] + "--->" +b[j]);37 }38 }39 }40

41 System.out.println("==============");42 //方案三:

43 for(int i=0; i<3; i++){44 for(int j=0; j<3; j++){45 if(i == 0 && j == 0)//a说他不和x比

46 continue;47 else if(i == 2 && (j == 0 || j == 2))48 continue;//c说他不和x,z比

49 else{50 System.out.println(a[i] + "" +a[j]);51 }52 }53 }54 }55 }

View Code

23. 打印菱形

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**

4 打印出如下图案(菱形)5 *6 ***7 *****8 *******9 *****10 ***11 *12 程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重 for循环,第一层控制行,第二层控制列。13 n=414 0 1 2 3 4 5 615 0 空 空 空 * 空 空 空16 1 空 空 * * * 空 空17 2 空 * * * * * 空18 3 * * * * * * *19 *@author小a玖拾柒20 * Date: 2018年8月18日21 */

22

23 public classTest2018 {24

25 public static void print(intn){26 int i = 0;27 int j = 0;28 for(i=0; i

29 for(j=0; j

33 System.out.print("*");34 }35 System.out.println();36 }37

38 for(i=1; i

39 for(j=0; j

43 System.out.print("*");44 }45 System.out.println();46 }47 }48

49 public static voidmain(String[] args) {50 print(4);51 }52 }

View Code

23. 分数计算

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的前20项之和。4 1.程序分析:请抓住分子与分母的变化规律。5 *@author小a玖拾柒6 * Date: 2018年8月18日7 */

8

9 public classTest2018 {10

11 public static voidmain(String[] args) {12 double fenmu = 2;13 double fenzi = 1;14 double num = 0;15 double sum = 0;16 for(int i = 0; i < 20; i++){17 num = fenmu /fenzi;18 double tmp =fenmu;19 fenmu = fenzi +tmp;20 fenzi =tmp;21 //System.out.println(fenmu + "\t" + fenzi + "\t" + num);

22 sum +=num;23 }24 System.out.println(sum);25 }26 }

View Code

24. 阶乘计算

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importorg.omg.Messaging.SyncScopeHelper;4

5 /**

6 题目:求1+2!+3!+...+20!的和7 *@author小a玖拾柒8 * Date: 2018年8月18日9 */

10

11 public classTest2018 {12

13 public static voidmain(String[] args) {14 //方案一:循环

15 long sum = 0;16 for(int i = 1; i <=20; i++){17 long fac = 1;18 for(int j = 1; j <=i; j++){19 fac *=j;20 }21 sum +=fac;22 }23 System.out.println(sum);24

25 //方案二: 阶乘

26 long ans = 0;27 for(int i=1; i<=20; i++){28 ans = ans +jieCheng(i);29 }30 System.out.println(ans);31

32 }33

34 public static long jieCheng(intnum){35 if(num == 1) return 1;36 else return jieCheng(num-1) *num;37

38 }39 }

View Code

25. 年龄递归计算

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 /**

4 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。5 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?6 *@author小a玖拾柒7 * Date: 2018年8月18日8 */

9

10 public classTest2018 {11

12 public static voidmain(String[] args) {13 int num = 5;14 System.out.println(jieCheng(num));15 }16

17 public static int jieCheng(intnum){18 if(num == 1) return 10;19 else return jieCheng(num-1) + 2;20 }21 }

View Code

26. 分解数字和数字反转

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.ArrayList;4 importjava.util.Collections;5 importjava.util.Iterator;6 importjava.util.List;7

8 /**

9 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。10 问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?11 *@author小a玖拾柒12 * Date: 2018年8月18日13 */

14

15 public classTest2018 {16

17 public static voidmain(String[] args) {18 String str = "1234567";19 //方案一: 直接反转计算

20 System.out.println("反转前:" +str);21 List list = new ArrayList();22 for(int i = 0; i < str.length(); i++){23 list.add(String.valueOf(str.charAt(i)));24 }25 Collections.reverse(list);26 System.out.println("【方案一】反转后:" + list + ",共有" + list.size() + "个数字");27

28 //方案二: 分解数字

29 Iterator iter =explodeNumber(Integer.parseInt(str)).iterator();30

31 while(iter.hasNext()){32 System.out.print(iter.next());33 }34 }35

36 public static List explodeNumber(intn){37 List li = new ArrayList();38 int count = 0;39 while(n != 0){40 li.add((int)n%10);41 count++;42 n = n / 10;43 }44 System.out.print("【方案二】:");45 System.out.println("共有" + count + "个数字");46 returnli;47 }48 }

View Code

27. 数列: 1,1,2,3,5,8,13,21...

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.io.BufferedReader;4 importjava.io.IOException;5 importjava.io.InputStreamReader;6 /**

7 * 数列: 1,1,2,3,5,8,13,21...8 * ==> 0,1,1,2,3,5,8,13,21...9 *10 *@author小a玖拾柒11 * Date: 2018年8月18日12 *13 */

14 public classTest2018 {15 public static voidmain(String[] args) {16 int first = 0;17 int second = 1;18 int sum = 0;19 int month = 0;20 try{21 BufferedReader buf = new BufferedReader(newInputStreamReader(System.in));22 System.out.println("请输入月份:");23 month =Integer.parseInt(buf.readLine());24 } catch(NumberFormatException e) {25 //TODO Auto-generated catch block

26 e.printStackTrace();27 } catch(IOException e) {28 //TODO Auto-generated catch block

29 e.printStackTrace();30 }31 for(int i = 1; i < month; i++){32 sum = first +second;33 first =second;34 second =sum;35 }36 System.out.println("5个月后:" +sum);37 }38 }

View Code

28. 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

1 packagecom.ftl;2

3 importjava.util.ArrayList;4 importjava.util.Arrays;5 importjava.util.Collections;6 importjava.util.List;7 importjava.util.Scanner;8

9 /**

10 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。11 *@author小a玖拾柒12 * Date: 2018年8月18日13 */

14

15 public classTest2018 {16 public static void sort(int[] a){//类似冒泡排序

17 int cup = 0;18 int l = a.length-1;19 for(int i=1; i a[0]){21 cup =a[i];22 a[i] = a[0];23 a[0] =cup;24 }25 if(a[i]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值