一、描述
1、一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果。
2、输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
3、输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:将最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
二、源代码
1、程序1
package tong.yue.hong;
/**
* 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
程序分析:在10万以内判断,先将该数加上100后再开方,再将该数加上168后再开方,如果开方后再平方等于原数则符合结果。
* @author tong
*
*/
public class SquareNumber {
public static void main(String[] args) {
int result=0;
for(int i=0;i<100001;i++){
if(isCompSqrt(i+100) && isCompSqrt(i+168)){
result = i;
break;
}
}
System.out.println("所求的数是:"+result);
System.out.println("----------");
for(int i=0;i<100001;i++){
if(isCompSqrt(i+100) && isCompSqrt(i+168)){
result = i;
break;
}
}
System.out.println("所求的数是:"+result);
}
//判断完全平方数,采用循环枚举法,效率比较低
private static boolean isCompSqrt(int n){
boolean isComp = false;
for(int i=1;i
运行结果:
2、程序2
package tong.yue.hong;
import java.util.Scanner;
/**
* 输入某年某月某日,判断这一天是这一年的第几天?
程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。
* @author tong
*
*/
public class Days {
public static void main(String[] args) {
//以非数字字符作为间隔符
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个日期:年(4位)——月(1-12)——日(1-31):");
int year = scanner.nextInt();
while(year<0||year>2050){
System.out.println("输入年份不符合要求,请根据现实年份进行输入:");
year = scanner.nextInt();
}
int month = scanner.nextInt();
while(month<0||month>12){
System.out.println("输入月份不符合要求,请根据现实年份(1-12)进行输入:");
month = scanner.nextInt();
}
int day = scanner.nextInt();
while(day<0||day>31){
System.out.println("输入日期不符合要求,请根据现实年份(1-31)进行输入:");
day = scanner.nextInt();
}
scanner.close();
computeDateByArray(year,month,day);
computeDateByCirculation(year,month,day);
}
//使用switch语句判断月份并且输出结果
private static void computeDateByCirculation(int year, int month, int day) {
int days = 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 +=31;
break;
case 2:
if (year%400==0||year%4==0&&year%100!=0) {
days +=29;
}else {
days +=28;
}
}
}
System.out.println(year+"-"+month+"-"+day+"是该年的第"+(days+day)+"天。");
}
//将每个月的天数存储在一个数组中,循环取出数组的值添加到天数
private static void computeDateByArray(int year, int month, int day) {
int[] daysPerMonth = {31,28,31,30,31,30,31,31,30,31,30,31};
//闰年的判断,能被400整除,或者能被4整除不能被400整除,闰年二月29天,平年28天
if (year%400==0||year%4==0&&year%100!=0) {
daysPerMonth[2] = 29;
}
int days = 0;
for (int i = 1; i < month; i++) {
//数组是以0索引开始的,所以下标减一
days +=daysPerMonth[i-1];
}
System.out.println(year+"-"+month+"-"+day+"是该年的第"+(days+day)+"天。");
}
}
运行结果:
3、程序3
package tong.yue.hong;
import java.util.Scanner;
/**
* 输入三个整数x,y,z,请把这三个数由小到大输出。
程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如果x>z则将x与z的值进行交换,这样能使x最小。
* @author tong
*
*/
public class SortThreeNum {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int x = scanner.nextInt();
System.out.println("请输入第二个整数:");
int y = scanner.nextInt();
System.out.println("请输入第三个整数:");
int z = scanner.nextInt();
scanner.close();
sort(x,y,z);
sort2(x, y, z);
}
//比较三个数的大小,先将最小值放在x变量中,然后再比较y和z位置数据的大小
private static void sort(int x,int y,int z){
if(x>y){
int t = x;
x = y;
y = t;
}
if(x>z){
int t = x;
x = z;
z = t;
}
if(y>z){
int t = z;
z = y;
y = t;
}
System.err.println("三个整数排序后的结果为:"+x+" "+y+" "+z);
}
//比较三个数的大小
private static void sort2(int x,int y,int z){
if (x>y) {
int temp = x ;
x = y;
y = temp;
}
//以上的步骤表示x和y中小的数放在x变量中,现在若是z比x小,则z就是最小值,x次之,y最大
if (x>z) {
int temp = x ;
x = z;
z = y;
y = temp;
}else {
//现在若是z比x大,则x就是最小值,z和y继续比较大小
if (z
运行结果: