【程序8】

题目:求s=a+aa+aaa+aaaa+aa...a 的值,其中a 是一个数字。例如2+22+222+2222+22222(此

时共有5 个数相加),几个数相加有键盘控制。

解决思路:

【程序9】

题目:一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编

程找出1000 以内的所有完数。

/**20.如果一个数等于其所有因子之和,我们就称这个数为"完数",

例如6 的因子为1,2,3,6=1+2+3,6就是一个完数.请编程打印出1000 以内所有的完数

*/
public class Demo20{
public static void main(String[] args){
for(int i = 0; i < 1000; i++){
int sum = 0;//这里的定义容易写到第一层循环的外面去导致出错
for(int j = 1; j <= i/2; j++){
if(i % j == 0){
sum += j;
}
}
if(sum == i){
System.out.print(i + "\t");
}
}
}
}

【程序10】

题目:一球从100 米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第

10 次落地时,共经过多少米?第10次反弹多高?

【程序11】

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

解题思路:用三个循环,最大为 4 ,然后将相同的 continue,不同的 count++ 一次就行了。

/**

*【程序11】

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

*/
public class Demo11{
public static void main(String[] args){
int count = 0,i,j,k;
System.out.print("这些数字为:");
for(i = 1 ; i <= 4 ; i++)
for(j = 1 ; i <= 4 ; j++)
for(k = 1 ; k <= 4 ; k++)
if((i != j) && (i != k) && (j != k)){
count++;
System.out.print((i * 100 + j * 10 + k)",");
}
System.out.println("共有的数字个数为:"+count);
}
}

【程序12】

题目:企业发放的奖金根据利润提成。利润(I)低于或等于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%提成,从键盘输入当月利润,求应发放奖金总

数?

解题思路:使用 if-else if 来作为分支,每一个算出来就行了。

/**

*【程序12】

*题目:企业发放的奖金根据利润提成。利润(I)低于或等于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%提成,从键盘输入当月利润,求应发放奖金总

*数?

*/
import java.util.Scanner;
public class Demo12{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("请输入薪资(单位:万元):");
double salary = s.nextDouble();
double jj = 0;
if(salary <= 10){
jj = salary * 0.1;
}else if(salary > 10 && salary < 20){
jj = 10 * 0.1 + (salary-10)*0.075;
}else if(salary > 20 && salary < 40){
jj = 10 * 0.1 + 10 * 0.075 + (salary-20) * 0.05;
}else if(salary > 40 && salary < 60){
jj = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + (salary - 40) * 0.03;
}else if(salary > 60 && salary < 100){
jj = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + (salary-60) * 0.015;
}else if(salary > 100){
jj = 10 * 0.1 + 10 * 0.075 + 20 * 0.05 + 20 * 0.03 + 40 * 0.015 + (salary - 100) * 0.01;
}
//jj = Math.round(jj * 100)/100;
System.out.println("当月利润 "+salary+" 万元"+",应当发放奖金总数为:"+jj+" 万元");
}
}

【程序13】

题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问

该数是多少?

解题思路:遍历需要用到一个循环 while,写一个专门用于判断是不是完全平方数的方法(就是一个数开方后再平方能够等于原数就是了)。用 if 判断就是了。

/**【程序13】

*题目:一个整数,它加上100 后是一个完全平方数,再加上168 又是一个完全平方数,请问

*该数是多少?

*/
public class Demo13{
public static void main(String[] args){
int i = 0;
boolean flag = false;
while(true){
flag = isSqrt(i + 100) && isSqrt(i + 100 + 168);
if(flag){
System.out.println("这个数是:"+i);
break;
}else{
i++;
}
}
}
//判断是不是完全平方数的函数,是就返回 true,反之则返回 false
public static boolean isSqrt(int num){
int m =(int)Math.sqrt(num);
if(m * m == num)
return true;
return false;
}
}

【程序14】

题目:输入某年某月某日,判断这一天是这一年的第几天?

解题思路:先要判断是不是闰年((year%4==0)&&(year%100!=0)||(year%400==0)),因为闰年2月会有 29 天,用一个数组存放天数。然后判断出来就行了。

/**

*【程序14】

*题目:输入某年某月某日,判断这一天是这一年的第几天?

*/
import java.util.Scanner;
public class Demo14{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("请依次输入年、月、日(格式 2018 8 4)");
System.out.print("年:");
int year = s.nextInt();
System.out.print("月:");
int month = s.nextInt();
System.out.print("日:");
int day = s.nextInt();
int[] months ={31,28,31,30,31,30,31,31,30,31,30,31};
int totalDay = 0;
if((year%4 == 0)&&(year%100 != 0)||(year%400 == 0)){
months[1] += 1;
}
if(month == 1){
System.out.println(year+"年"+month+"月"+day+"日是这一年的第"+day+"天");
}else{
for(int i = 0;i < month-1;i++){
totalDay += months[i];
}
totalDay += day;
System.out.println(year+"年"+month+"月"+day+"日是这一年的第"+totalDay+"天");
}
}
}

或者使用 switch-case 来进行计算:

//练习:输入三个数字表示年月日,输出这一天在这一年时第几天

import java.util.Scanner;
public class Demo14{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
int year,month,day;
year = s.nextInt();
month = s.nextInt();
day = s.nextInt();
int sum = 0;
//根据月份确定到底要加上多少天
switch(month){
case 12:sum += 30;
//经历 11 月的 30 天
case 11:sum += 31;
//经历 10 月的 31 天
case 10:sum += 30;
case 9:sum += 31;
case 8:sum += 31;
case 7:sum += 30;
case 6:sum += 31;
case 5:sum += 30;
case 4:sum += 31;
case 3://加上 2 月平年天数,
//闰年和平年的判断
if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0){
sum += 29;
}else{
sum += 28;
}
case 2:sum += 31;
case 1:sum += day;
}
System.out.println(sum);
}
}

【程序15】

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

解题思路:用 if 将几种情况分出来,然后输出即可。

/**【程序15】

*题目:输入三个整数x,y,z,请把这三个数由小到大输出。

*/
import java.util.Scanner;
public class Demo15{
public static void main(String[] args){
Scanner s = new Scanner(System.in);
System.out.println("请输入三个整数:");
int m = s.nextInt();
int n = s.nextInt();
int k = s.nextInt();
System.out.print("从小到大的顺序为:");
if(m > n){
if(n > k){//这里是按顺序的结构
System.out.println(k+","+n+","+m);
}else if(m > k){//这里是 k > n,k < m 时
System.out.println(n+","+k+","+m);
}else if(m < k){
System.out.println(n+","+m+","+k);
}
}else if(m > k){//这里就是 m
System.out.println(k+","+m+","+n);
}else if(m < k){
if(n > k){
System.out.println(m+","+k+","+n);
}else if(n < k){
System.out.println(m+","+n+","+k);
}
}
}
}