经典编程题,用Java实现
- 1.将三个数字从小到大排序
- 2.猴子吃桃问题(自己输入天数和剩余桃数)
- 3.百钱买百鸡问题
- 4.打渔晒网问题
- 5.输入一个数求它的阶乘
- 6.输入三个数,判断能否构成三角形
- 7.输出一千以内所有的水仙花数
1.将三个数字从小到大排序
import java.util.Scanner;
public class Sort {
public static void main(String[] args) {
//将三个数字从小到大排序
Scanner sc=new Scanner(System.in);
System.out.println("enter three number");
//输入三个数字
int num1=sc.nextInt();
int num2=sc.nextInt();
int num3=sc.nextInt();
numSort1(num1,num2,num3);
}
//将三个数排序
public static void numSort1(int num1,int num2,int num3){
if(num1>num2){ //令num1小于num2
int temp=num1;
num1=num2;
num2=temp;
}
if(num1>num3){ //令num1小于num3
int temp=num1;
num1=num3;
num3=temp;
}
if(num2>num3){ //令num2小于num3
int temp=num2;
num2=num3;
num3=temp;
}
System.out.printf("%d<%d<%d\n",num1,num2,num3);
}
}
运行结果
enter three number
45 56 34
34<45<56
2.猴子吃桃问题(自己输入天数和剩余桃数)
import java.util.Scanner;
public class MonkeyEatPeaches {
public static void main(String[] args) {
//猴子吃桃问题(自己输入天数和剩余桃数)
Scanner sc=new Scanner(System.in);
System.out.println("enter day");
//输入现在是吃桃的第几天
int day=sc.nextInt();
day-=1;
//实际吃桃天数要减一,因为这一天还没吃
System.out.println("enter peaches");
//输入这天剩余桃子的数量
int num=sc.nextInt();
while(day>0){
num=(num+1)*2;
//每次吃剩余的一半加一个
day-=1;
}
System.out.println("peaches number is "+num);
//输出原有的桃子数
}
}
运行结果
enter day
10
enter peaches
1
peaches number is 1534
3.百钱买百鸡问题
公鸡一只五钱,母鸡一只三钱,小鸡三只一钱,用一百钱买一百只鸡,输出三种鸡所有可能的组合。
public class HundredCandC {
public static void main(String[] args) {
//百钱买百鸡问题,公鸡一只五钱,母鸡一只三钱,小鸡三只一钱
//用一百钱买一百只鸡,输出三种鸡所有可能的组合
for(int fa=0;fa<21;fa++){
//公鸡的数量范围为0~20只
for(int ma=0;ma<34;ma++){
//母鸡的范围为0~33只
for(int son=3;son<100;son++){
//小鸡的范围为3~99只
if(fa+ma+son==100){
//判断三种鸡数量和是否为100
if(fa*5+ma*3+son/3==100){
//判断总钱数是否为100
if(son%3==0){
//判断小鸡数量是否为三的倍数
System.out.printf("%d,%d,%d\n",fa,ma,son);
}
}
}
}
}
}
}
}
运行结果
0,25,75
4,18,78
8,11,81
12,4,84
4.打渔晒网问题
如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,输入一个日期判断渔夫是在打渔还是晒网,此处不考虑输入的日期在日历上是否存在,所以输入时要输入一个正确的日期。
import java.util.Scanner;
public class FishNet {
public static void main(String[] args) {
/*如果一个渔夫从2011年1月1日开始每三天打一次渔,两天晒一次网,
* 输入一个日期判断渔夫是在打渔还是晒网,
* 此处不考虑输入的日期在日历上是否存在,
* 所以输入时要输入一个正确的日期。
*/
Scanner sc=new Scanner(System.in);
System.out.println("enter year month day");
//输入年 月 日
int year=sc.nextInt();
int month=sc.nextInt();
int day=sc.nextInt();
int[] run={31,29,31,30,31,30,31,31,30,31,30,31};
//闰年的每个月的天数
int[] ping={31,28,31,30,31,30,31,31,30,31,30,31};
//平年的每个月的天数
int sum=0;
//记录距离2011年1月1日的天数
boolean jud=judge(year);
//判断输入的年份是否为闰年
if(jud){ //若是闰年
for(int i=0;i<month-1;i++){
sum+=run[i];
//将闰年每月天数累加
}
sum+=day;
//再加上天数
}
if(!jud){ //若是平年
for(int i=0;i<month-1;i++){
sum+=ping[i];
//将平年每月天数累加
}
sum+=day;
//再加上天数
}
for(int i=year;i<year;i++){
//判断从2011年到输入的年份之间的每一年
if(judge(i)){
sum+=366;
//如果是闰年则这一年加366天
}
if(!judge(i)){
sum+=365;
//如果是平年则这一年加365天
}
}
int thing=sum%5;
//将总天数对5取余
//余数是1,2,3说明在打渔,否则在晒网
if(thing>0&&thing<4){
System.out.println("catch fish");
//打渔
}
else{
System.out.println("dry net");
//晒网
}
}
public static boolean judge(int year){
return (year%4==0&&year%100!=0||year%400==0);
//判断是否为闰年,是则返回true
}
}
运行结果
enter year month day
2011 1 5
dry net
5.输入一个数求它的阶乘
import java.util.Scanner;
public class JieCheng {
public static void main(String[] args) {
//输入一个数求它的阶乘
Scanner sc=new Scanner(System.in);
System.out.println("enter a number");
//输入一个数
int num=sc.nextInt();
int i=1;
int sum=1;
//用于存放每次累乘的值
while(i<num+1){
sum*=i++;
}
System.out.println(num+"!= "+sum);
}
}
运行结果
enter a number
10
10!= 3628800
6.输入三个数,判断能否构成三角形
输入三个数,判断能否构成三角形,若能,则求其面积(海伦公式),并判断它是什么三角形。
import java.util.Scanner;
public class TriangleJudge {
public static void main(String[] args) {
//输入三个数,判断能否构成三角形
//若能,则求其面积(海伦公式)
//并判断它是什么三角形
Scanner sc=new Scanner(System.in);
System.out.println("enter three number");
//输入三个数
double num1=sc.nextInt();
double num2=sc.nextInt();
double num3=sc.nextInt();
double area=0;
//定义面积并初始化为0
double s=(num1+num2+num3)/2;
//定义周长的二分之一
if(num1+num2>num3&&num1+num3>num2&&num2+num3>num1){
//判断是否能构成三角形,能则求其面积
area=Math.sqrt(s*(s-num1)*(s-num2)*(s-num3));
//利用海伦公式求面积
}
if(area==0){
//如果面积为0,说明不能构成三角形,直接输出不能构成,退出系统
System.out.println("not a triangle");
System.exit(0);
}
if(num1==num2&&num1==num3){
//三条边都相等说明是等边三角形
System.out.println("equilateral triangle");
}else if(num1==num2||num1==num3||num2==num3){
//有任意两条边相等说明是等腰三角形
System.out.println("isosceles triangle");
}else if(num1*num1+num2*num2==num3*num3||
num1*num1+num3*num3==num2*num2||
num3*num3+num2*num2==num1*num1){
//符合勾股定理说明是直角三角形
System.out.println("right triangle");
}else{
//以上请况都不符合,则为普通三角形
System.out.println("common triangle");
}
//输出其面积,保留三位小数
System.out.printf("area=%.3f\n",area);
}
}
运行结果
enter three number
2 3 4
common triangle
area=2.905
7.输出一千以内所有的水仙花数
public class NarcissisticNum {
public static void main(String[] args) {
//输出一千以内所有的水仙花数
int count=0;
for(int i=100;i<1000;i++){
int b=i/100;
int s=i/10%10;
int g=i%10;
if(b*b*b+g*g*g+s*s*s==i){
System.out.println(i);
count++;
}
}
System.out.println("count:"+count);
}
}
运行结果
153
370
371
407
count:4