前言
1.我自己学过c语言后学Java的敲的基础编程题,会持续更新更多!!!
2.有些题有更简便的方法,可在评论区提供分享,共同进步。
3.如果需要无注释版本评论区说一声(我自己的注释可能有点难以理解hhhh)
4.------------基础题完后,会持续更新一些 面向对象的题目
5.其中的题:有来自课本,自己去其他博客中找的,如有侵权请告知,立删!
代码大部分是自己敲的,少部分借鉴其他博主的。
一、基础题
1.1: 判断闰年
(解题思路:判断是否满足闰年条件即可)
//判断是否是闰年
import java.util.Scanner;
public class JudgeRunNian {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
while(true) {
System.out.print("请输入需要判断的年份:");
int a = s.nextInt();
if (a % 4 == 0 && a % 100 != 0)
System.out.println(a + "这个年份为闰年");
else
System.out.println(a + "这个年份不是闰年");
}
}
}
1.2 :求斐波那契数列的前40项之和
(解题思路:从第三项开始,后每一项等于前两项之和)
public class Fpnq {
public static void main(String[] args) {
int f1=1,f2=2;
int sum=f1+f2;
int f3;
for (int i=1;i<=4;i++){
f3=f1+f2;
f1=f2;
f2=f3;
sum+=f3;
}
System.out.println("斐波那契数列的前40项和为:"+sum);
}
}
1.3:输入三个数:并按小到大排序输出
(解题思路:分别取出最大值,最小值,最后减去这两个,即为中间值)
import java.util.Arrays;
import java.util.Scanner;
public class Enter_three {
public static void main(String[] args) {
System.out.println("输入三个数:");
sort();
}
// 定义一个三个数排序方法,定义三个数类型定义为double类型为了适应跟多情况
public static void sort() {
Scanner scanner = new Scanner(System.in);
double x = scanner.nextDouble();
double y = scanner.nextDouble();
double z = scanner.nextDouble();
//获取最大值
double max = (x > y) ? x : y;
max = (max > z) ? max : z;
//获取最小值
double min = (x < y) ? x : y;
min = (min < z) ? min : z;
//获取中间值
double mid = x + z + y - max - min;
System.out.println("由小到大排序:");
System.out.println(min + "<" + mid + "<" + max);
}
}
1.4:输出9x9乘法口诀
public class Cf9_9 {
public static void main(String[] args) {
int i,j;
for(i=1;i<=9;i++) {
for (j = 1; j <= 9; j++)
System.out.print(i + "*" + j + "=" + i * j+" ");
System.out.println();
}
}
}
1.5:求两数的最小公倍数和最大公约数
/*
有以下比较方便的公式:x*y=最小公倍数*最大公约数
*/
import java.util.Scanner;
public class MaxAndMin {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("请输入两个整数:");
int a=s.nextInt();
int b=s.nextInt();
System.out.println(a+","+b+"最大公约数为:"+Max(a,b));
System.out.println(a+","+b+"最小公倍数为:"+a*b/Max(a,b));
}
//最大公约数方法(),相互比较,一直减到相等就是最大公约数
public static int Max(int a,int b){
if(a==b)
return a;
while(a!=b){
if(a>b)
a=a-b;
else
b=b-a;
}
return a;
}
}
1.6:递归求n的阶乘
import java.util.Scanner;
public class Test8_NJC {
public static void main(String[] args) {
int n;
System.out.print("请输入你要求的数n的阶乘:");
Scanner scanner=new Scanner(System.in);
n=scanner.nextInt();
System.out.println(n+"的阶乘为:"+fun(n));
}
public static int fun(int n){
int temp=1;
if (n==1)
temp=1;
else
temp=n*fun(n-1);
return temp;
}
}
1.7:输入数据存入数组,将其逆序存放,然后再输出。如,存入123456789,在原数组中完成逆序存放,987654321,输出
解题思路:1.首元素与尾元素交换存储 2.从头开始逐一交换 3.分奇偶个数情况
import java.util.Scanner;
public class Test10 {
public static void main(String[] args) {
System.out.println("请输入数据:");
String s=new Scanner(System.in).nextLine();
char[]a=s.toCharArray();// 将输入的字符串转化为字符数组
int i,j;
// 当输入长度为偶数时候
if (a.length%2==0){
j=a.length-1; //从尾开始依次与前元素交换
for ( i=0;i<a.length/2;i++){
for (;j>=a.length/2;){
char temp=a[i];
System.out.println("i="+i+"j="+j);
a[i]=a[j];
a[j]=temp;
j--;
break; //a[i]只执行一次交换即可,所以要提前结束j循环,进行下一次a[i]值的交换
}
}
}
//当输入长度为奇数时候
if (a.length%2==1){
j=a.length-1;
for(i=0;i<a.length/2;i++){
for (;j>a.length/2;){
char temp=a[i];
a[i]=a[j];
a[j]=temp;
j--;
break;
}
}
}
System.out.println("逆序存储");
for (i=0;i<a.length;i++){
System.out.print(a[i]);
}
}
}
1.8输入十进制数字,以八进制/二进制/十六进制输出
(该方法似乎不是太符合题意,有其他方法可,提供评论区互相交流)
/*int的包装类 Integer类中的方法:(其他基本数据类型的包装类大同小异)
1.toBinaryString(int i)以二进制方式放回一串字符
2.toHexString(int i) 以十六进制形式返回一串字符
3,toOctalString(int i) 以八进制形式返回一串字符
*/
import java.util.Scanner;
public class Test11 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n;
int a=6,b=2;
String s=String.valueOf(a);
System.out.println("请输入你要转化的值n:");
n=scanner.nextInt();
System.out.println("以二进制输出:"+Integer.parseInt(Integer.toBinaryString(n)));
System.out.println("以十六进制输出:"+Integer.toHexString(n));
System.out.println("以八进制输出:"+Integer.toOctalString(n));
}
}
1.9// 将数组内元素往后移动m个单位
import java.util.Scanner;
public class Test13 {
public static void main(String[] args) {
int[]A=new int[20];
int n;
Scanner scanner=new Scanner(System.in);
System.out.print("请输入元素要移动的m个单位:");
int m=scanner.nextInt();
System.out.print("请输入想要的数组起始要多少个元素:");
n=scanner.nextInt();
System.out.println("请输入前"+n+"个元素");
for(int i=0;i<n;i++)
A[i]=scanner.nextInt();
System.out.println("移动之前:");
for(int i=0;i<A.length;i++)
System.out.println("A["+i+"]"+"="+A[i]);
for(int temp=n-1;temp>=0;temp--) {
A[temp + m] = A[temp];
A[temp]=0;
}
System.out.println("\n----------------");
System.out.println("移动之后:");
for(int i=0;i<A.length;i++)
System.out.println("A["+i+"]"+"="+A[i]);
}
}
2.0:一个偶数必然能由两个素数之和形成,输入一个偶数,输出组成该偶数素数
(解题思路:)
import java.util.Scanner;
public class Test14 {
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
System.out.println("请输入一个偶数n:");
int n;
n=s.nextInt();
int i=0,j=0;
for(i=2;i<=n;i++) {
for (j = 2; j <= n/2; j++) { // n/2是为了不输出重复组合
if (Sushu(i)+Sushu(j)==n)
System.out.println(i+", "+j);
}
}
}
// 定义一个判断素数,并返回素数的方法
public static int Sushu(int n){
int temp=0;
int i;
for (i=2;i<=n;i++) {
if (n % i == 0)
break;
}
if(i==n)
temp=n;
return temp;
}
}
2.0 :输出3 x 3 矩阵,并求其对角线之和
import java.util.Scanner;
public class Test15_3x3 {
public static void main(String[] args) {
int i,j;
int[][]A=new int[3][3];
Scanner scanner=new Scanner(System.in);
//给矩阵赋值:
for(i=0;i< A.length;i++)
for (j=0;j<A.length;j++){
System.out.println("输入第"+(i+1)+"行的第"+(j+1)+"个元素的值:");
A[i][j]=scanner.nextInt();
}
//打印出矩阵:
System.out.println("\n您的矩阵如下:");
for(i=0;i< A.length;i++) {
for (j = 0; j < A.length; j++){
System.out.printf("%-3d",A[i][j]);
}
System.out.println("\n");
}
//输出对角线之和
int sum1=0;
System.out.println("\n主对角线和如下:");
for(i=0;i<A.length;i++) {
for (j = 0; j < A.length; j++) {
if (i == j) {
sum1+=A[i][j];
System.out.printf("%-3d", A[i][j]);
}
}
}
System.out.println("="+sum1);
int sum2=A[0][2]+A[1][1]+A[2][0];
System.out.println("\n副对角线和如下:");
System.out.println(A[0][2]+" "+A[1][1]+" "+A[2][0]+" ="+sum2);
}
}
2.1 :输出杨辉三角前十行
public class Test_9_yhsj {
public static void main(String[] args) {
int i,j;
int[][]a=new int[10][10];
//这个for循环主要是给每行第一个元素和要输出行的最后一个元素赋值为:1
for (i=0;i<a.length;i++){
a[i][0]=1;
a[i][i]=1;
}
//给第三行以及后面行从第二个元素开始赋值
for(i=2;i<a.length;i++)
for(j=1;j<a.length;j++){
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
//变量输出元素,元素输出的个数和行数有关
for(i=0;i<a.length;i++) {
for (j = 0; j <= i; j++) {
System.out.printf("%-5d",a[i][j]);
}
System.out.println("\n");
}
}
}
2.2:一个数列为:2/1、3/2、5/3 …求该数列的前20项之和
package Tsk;
public class Test16 {
public static void main(String[] args) {
double m=1.0,z=2.0,temp,temp1;
double sum=0.0;
for(int i=1;i<=20;i++){
temp=z/m;
temp1=z;
z=z+m;
m=temp1;
sum+=temp;
}
System.out.println("前20项之和为:"+sum);
}
}
2.3:输入日期 ,输出该天为该年的第多少天
public class YearMouthDay {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int year,mouth,day,sum=0;
System.out.print("请输入year,mouth,day:");
year=scanner.nextInt();
mouth=scanner.nextInt();
day=scanner.nextInt();
switch (mouth){
case 12:sum+=30;
case 11:sum+=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: sum+=28;
case 2: sum+=31;
case 1: sum+=day;
}
if (year%4==0&&year%100!=0)
sum+=1;
System.out.println(year+"年"+mouth+"月"+day+"日"+":"+"今天是该年的第"+sum+"天");
}
}
2.4:输出一个正整数因式分解,例如:12=2* 2 *3
import java.util.Scanner;
//题目1:输出一个正整数因式分解:
//例如:12=2*2*3
public class Basics_01 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.print("请输入一个正整数n:");
int n=scanner.nextInt();
int temp=n; //定义一个暂时值temp 用于循环,(不能用n进行循环,n每找到一次因子都要除)
System.out.print(n+"=");
for (int i=2;i<temp;i++){
if (i==n){
System.out.print(n);
break;
}
if (n%i==0){
n=n/i;
System.out.print(i+"*");
i--; //令i继续为 1 ,之和的i++后 i==2,据需判断 2这个因素是不是因子
}
}
}
}
2.5:买饮料问题:一瓶饮料3块,一个瓶子可退回1块钱,20块最多买多少瓶
import java.util.Scanner;
public class Basics_02 {
public static void main(String[] args) {
int countp=0,tempMoney=0,sumcountp=0; //countp 统计剩余的钱可以买的瓶的数量,sumcountp统计全部瓶数,tempMoney余钱
Scanner scanner=new Scanner(System.in);
System.out.println("输入你的钱:");
int Money=scanner.nextInt();
while(Money/3!=0){ //除少于3 就买不起了!
countp=Money/3; //零时瓶数
sumcountp+=countp; // 累加瓶数
tempMoney=countp+Money%3; //瓶数就可以抵钱+余钱
Money=tempMoney; //重新赋值就行判断循环
}
System.out.println("最多可以买"+sumcountp+"瓶");
}
}
2.6:1 2 3 4 能组成多少个不相同的三位数
public class Basics_03 {
public static void main(String[] args) {
int count=0;
for(int i=1;i<=4;i++)
for (int j=1;j<=4;j++)
for (int k=1;k<=4;k++){
if (i!=j && i!=k && j!=k)
count++;
}
System.out.println("一共可以组成"+count+"个不同的三位数");
}
}
2.6:自由落体第n次反弹回来所经历过的路程,以及第n次反弹的高度(递归做法)
import java.util.Scanner;
public class Basics_04 {
double begheight; // 定义一个成员变量,为自由落体开始的高度
// 递归求第n次弹回的高度
public double FTheight(int n){
if (n==1)
return this.begheight/2; //弹回高度为下降时候的一半
return FTheight(n-1)/2; // 递归求第n次弹回的高度
}
//定义一个计算路程方法: 每次弹回后的路程都等于,弹回高度的三倍
public double LC(int n){
int sum=0;
for (int i=1;i<=n;i++)
sum+=FTheight(i)*3;
return sum;
}
public static void main(String[] args) {
int n;
Scanner scanner=new Scanner(System.in);
Basics_04 height=new Basics_04();
System.out.print("输入起始高度:");
height.begheight=scanner.nextDouble();
System.out.print("输入要计算的第n次弹回:");
n=scanner.nextInt();
System.out.println("第"+n+"次弹回高度为"+height.FTheight(n)+"\n"+"第"+n+"次弹回的总路程为"+height.LC(n));
}
}
2.7:输出一个范围内的自守数,自首数 :25 的平方 625 尾部相同。
import java.util.Scanner;
public class Basics_05 {
// 定义一个判断自守数的方法
public static boolean judge(int n){
String s=new Integer(n).toString(); //将整型变量n转为字符串型
char[]sz=s.toCharArray(); // 再将字符串型转为字符数组型
int nf=(int)Math.pow((double)(n),2); // 对需要判断的整型变量n 求平方
String s2=new Integer(nf).toString();// 以下同理
char[]sz2=s2.toCharArray();
//for循环长度小的数组从头开始遍历,长度大的则要从小数组最后一个元素的后一个元素开始,然后进行逐一对比
for (int i=0,j=sz.length-1;i<sz.length;i++,j++){
if (sz[i]!=sz2[j])
return false ; //当中有一个字符不一样就返回false
}
return true;
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n;
System.out.println("请输入一个整数范围最大值n");
n=scanner.nextInt();
for (int j=1;j<=n;j++){
if (judge(j))
System.out.println(j+"是一个自守数");
}
}
}
2.8:蜗牛爬井问题:蜗牛白天爬5米, 晚上下滑1.5 米,求n米的井要爬多少天。
import java.util.Scanner;
public class Basics_06 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入井深(m):");
Double wellDepth = input.nextDouble();
int day = 1; //蜗牛爬出井需要的天数,无论井深是多少,天数最少是1天。
double sum = 0; //蜗牛爬过的距离
while (true) { // 定义一个死循环,让蜗牛爬的路程一直加,并且计算天数
sum += 5;
if (sum >= wellDepth)
break;
sum -= 3.5;
day ++;
}
System.out.print("蜗牛需要 " + day +" 天才能从井底到爬出来。");
}
}
2.9:递归求n阶乘
import java.util.Scanner;
public class Basics_07 {
public static int DG(int n){
int temp=1;
if (n==1)
return 1;
else
temp=n*DG(n-1); // 此步数关键
return temp;
}
public static void main(String[] args) {
int n;
Scanner scanner=new Scanner(System.in);
System.out.print("请输入需要求阶乘的数n:");
n=scanner.nextInt();
System.out.println(n+"的阶乘数为"+DG(n));
}
}
3.0:体彩中有一项是双色球,要求在1-33号共33个红色球里选出6个,1-16号共16个蓝色球中选出一个作为中奖号码,请实现这个需求。
import java.util.Arrays;
import java.util.Random;
public class Basics_08 {
public static void main(String[] args) {
int[]r=FuZhi(33);// 创建红球数组,并调用FuZhi(int n)进行赋值
int[]b=FuZhi(16);// 创建蓝球数组,并调用FuZhi(int n)进行赋值
int[]sred=SeleRed(r);// 调用SeleRed(int []a )方法返回随机红球的6个元素的数组
System.out.println("红球的中奖号码为:"); //遍历输出红球中奖号数
for (int i=0;i<sred.length;i++){
System.out.println(sred[i]);
}
System.out.println("篮球中奖号码为:"+SeleBlue(b));// 输出篮球号码数
}
//定义一个赋值给色球数组的方法:FuZhi(int n) n为色球最大数好
public static int[] FuZhi(int n){
int[]A=new int[n];
for (int i=0;i<A.length;i++)
A[i]=i+1;
return A;
}
// 定义选择红求的方法SeleRed(int [] a)
public static int[] SeleRed(int[] a){
for (int i=0;i<6;i++){
int j;
j=new Random().nextInt(a.length-i)+i;//nextInt(5)返回随机数范围为:[0-5)整数
//nextInt(5)+1 范围则变为 [1-5]
//然后交换值
int t=a[i];
a[i]=a[j];
a[j]=t;
}
return Arrays.copyOf(a,6);//返回打乱号码的a数组的前六个元素
}
// 由于蓝球只需要一个号码,则随机返回一个号码数即可
public static int SeleBlue(int[] b){
return b[new Random().nextInt(b.length)]; // 直接随机返回返回蓝色球一个数
}
}
3.1: 生兔子问题: 有一对兔子在出生第三个月后生下一对兔子,之后每一个月都生下一对兔子,
import java.util.Scanner;
//题目: 生兔子问题: 有一对兔子在出生第三个月后生下一对兔子,之后每一个月都生下一对兔子,
//第某月的兔子数为多少。
public class Basics_09 {
public static void main(String[] args) {
int mouth;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入某月");
mouth=scanner.nextInt();
System.out.println("第"+mouth+"月有"+getsum(mouth)+"对兔子。");
}
//递归求某月兔子数量
// 由题意知:1,2月有1 对,3月开始后一个月的数量等于前两个月数量之和
public static int getsum(int mouth){
if (mouth==1||mouth==2)
return 1;
else return getsum(mouth-1)+getsum(mouth-2);
}
}
3.1: 随机生成两个数组,要求将两数组,归并为一个数组,并且顺序由大到小
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
//题目: 随机生成两个数组,要求将两数组,归并为一个数组,并且顺序由大到小
public class Basics_10 {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
System.out.println("请输入第一个数组元素个数:");
int n1=scanner.nextInt();
int[]A=creat(n1);
System.out.println("请输入第二个数组元素个数:");
int n2=scanner.nextInt();
int[]B=creat(n2);
int[]C=merge(A,B);
Arrays.sort(C);
for (int i=0;i<C.length;i++)
System.out.println(C[i]);
}
//定义一个随机创造数组的方法
public static int[] creat(int n){
int[] A;
A=new int[n];
for (int i=0;i<A.length;i++){
A[i]=new Random().nextInt((int)Math.pow((double)n,(double)2 ));
}
return A;
}
//定义一个将两数组归并的方法
public static int[] merge(int[]a,int[]b){
int[]c;
int temp=0;// temp值记录b数组下标
c=new int[a.length+b.length];
for (int i=0;i<c.length;i++){
if (i<a.length){
c[i]=a[i];
}
else{
c[i]=b[temp];
temp++;
}
}
return c;
}
}
3.2:猴子选大王,一共有15只猴子,按1~7依次报数,报7则淘汰,剩下最后的即为大王
//题目:猴子选大王,一共有15只猴子,按1~7依次报数,报7则淘汰,剩下最后的即为大王
public class Basics_11 {
public static void main(String[] args) {
boolean[]monkey=new boolean[15]; //定义boolean类型数组monkey
for (int i=0;i<monkey.length;i++){ // 初始化全为true
monkey[i]=true;
}
//二、定义需要用的变量
int summonkey=15; // begin未淘汰的猴子数
int index=0; // 定义一个下标
int number=0; //定义报数
//循环淘汰
while(summonkey>1){ //剩余数不大于1
if (monkey[index]) //判断该猴子是否已经被淘汰
number++; //不淘汰则报数
if (number==7){ // 报数为7则淘汰该猴子
monkey[index]=false;
number=0;// 报数重新置0
summonkey--;
}
index++; // 下一只猴子
if (index==15) // 如果下标等于15 置0,重新开始报数
index=0;
}
//遍历判断未被淘汰的猴子即是猴王
for (int i=0;i<monkey.length;i++){
if (monkey[i])
System.out.println("猴子王是第"+(i+1)+"个");
}
}
}
3.3:打印水仙花数 :条件,三位数的整数,各个位的数的立方之和等于本身
//打印水仙花数 :条件,三位数的整数,各个位的数的立方之和等于本身
public class Basics_12 {
public static void main(String[] args) {
for (int i=100;i<=1000;i++){
if (judge(i))
System.out.println(i+"是一个水仙花数");
}
}
//定义一个判断水仙花数的方法
public static boolean judge(int n){
int sum=0;
int temp=n;// 定义temp代替n去每次循环都去掉一位数
while(temp!=0){
sum+=(temp%10)*(temp%10)*(temp%10);
temp=temp/10;
}
if (sum==n)
return true;
return false;
}
}
3.4:封装百分制分数,和它对应的五档分数制
//题目 封装百分制分数,和它对应的五档分数制
// 测试类
public class Basics_13 {
public static void main(String[] args) {
Sore s1=new Sore(90);
System.out.println(s1.toString());
}
}
// 定义一个分数类,成员变量有 int sore, char level, 以及成员方法 stulevel(int s),以及重写toString()。
class Sore{
int score;
char level;
//构造方法
public Sore() { //无参
}
public Sore(int score) { // 有参
this.score = score;
this.level=stulevel(score);
}
// 定义一个判断档次的方法
private char stulevel(int s){
char r = 0;
switch(s/10) {
case 10:case 9:
r = 'A';break;
case 8:case 7:
r = 'B';break;
case 6:
r = 'C';break;
case 5:case 4:case 3:case 2:
r = 'D';break;
case 1:case 0:
r = 'E';break;
}
return r;
}
// 重写toString()
public String toString() {
return "Student Sore = " +
+ score +
", level is " + level;
}
}
3.5: 输入一个邮箱,提取邮箱名字
import java.util.Scanner;
public class Basics_15 {
public static void main(String[] args) {
System.out.println("请输入邮箱:");
String e=new Scanner(System.in).nextLine();
System.out.println("名字为:"+Getname(e));
}
public static String Getname(String e){
int i=e.indexOf('@'); // 用String类中的 indexOf()返回某个字符的下标
System.out.println("下标为"+i);
if (i==-1){
return "输入邮箱有误";
}
String name=e.substring(0,i);// 用String类中的 substring(int beg,int end)方法截取字符串,截取不包括end下标元素
return name;
}
}
3.5(懒得打了hhhh)
import java.util.Scanner;
public class Task_15 {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入一个金额:");//提示输入金额
float cash= scan.nextFloat();// 输入金额,不定义为double类型是因为double类型精度太高不利于统计个数
int y=0,j=0,wf=0,f=0;// 定义y来统计 1元的个数,j来统计 2角的个数, wf来统计 5分的个数, f来统计 1分的个数
//统计1元个数
if (cash>=1){while(cash>=1){ //首先判断现金是否大于 1元,大于则统计
y++; //个数累加
cash=(float) (cash-1.0); //每次循环都减掉 1元,直到小于1元,退出循环,继续这个循环下面语句
}
}
System.out.println(cash); // 输出减完 1元值后的 cash(现金)
System.out.println("1元 "+y+"个"); // 输出 1元的个数
//统计2角的个数(与上同理)
if(cash>=0.2){
while(cash>0.2){
j++;
cash=(float)(cash-0.2);
}
}
System.out.println(cash);
System.out.println("2角 "+j+"个");
//统计5分的个数(与上同理)
if (cash>=0.05){
while(cash>=0.05){
wf++;
cash=(float) (cash-0.05);
}
}
System.out.println(cash);
System.out.println("5分 "+wf+"个");
//统计1分的个数(与上同理)
if(cash>=0.01){
while(cash>=0.01){
f++;
cash=(float) (cash-0.01);
}
}
if(cash>0.005){ //四舍五入了(由于越算下去小数位越多,按正常金钱使用不会出现小数位过多的情况)
f++;
}
System.out.println(cash);
System.out.println("1分 "+f+"个");
}
}
3.6:题目:1.输入年月,将输出出日历表(从1900.1.1开始计算总天数) 2.输出两日期相差多少天 3.输出后一个日期该天是星期几;
(本题我第一次做的时候也是感觉很难)
import java.util.Scanner;
/*
* 1.输入年月,将输出出日历表(从1900.1.1开始计算总天数)
* 2.输出两日期相差多少天
* 3.输出后一个日期该天是星期几
*/
public class Task_14 {
public static int sum1900(int year,int month) {
int sum=0;
for (int i = 1900; i < year; i++) {
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) {
sum += 366;
} else {
sum += 365;
}
}
for (int j = 1; j < month; j++) {
if (j == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
sum += 29;
} else {
sum += 28;
}
} else {
if (j == 4 || j == 6 || j == 9 || j == 11) {
sum += 30;
} else {
sum += 31;
}
}
}
return sum;
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.println("请输入年份(小):");
int year1=in.nextInt();
System.out.println("请输入月份(小):");
int month1=in.nextInt();
System.out.println("请输日(小):");
int day1= in.nextInt();
System.out.println("请输入年份(大):");
int year2=in.nextInt();
System.out.println("请输入月份(大):");
int month2=in.nextInt();
System.out.println("请输日(大):");
int day2= in.nextInt();
int sumMouth=0;
int sumsmall=sum1900(year1,month1)+day1; //两日期中小的 日期到 1900.1.1 的天数
int sumbig=sum1900(year2,month2)+1;
//该月有几天,
if(month2==2) {
if(year2%4==0&&year2%100!=0||year2%400==0){
sumMouth=29;
}else {
sumMouth=28;
}
}else {
if(month2==4||month2==6||month2==9||month2==11){
sumMouth=30;
}else {
sumMouth=31;
}
}
int temp=sumbig;
int wekday=temp%7;
System.out.println("后一个日期的日历如下:");
System.out.println("日\t一\t二\t三\t四\t五\t六");
int count=0;
for(int i=1;i<=wekday;i++){
System.out.print("\t");
count++;
}
for(int i=1;i<=sumMouth;i++) {
if(temp%7==6) {
System.out.print(i+"\n");
}else {
System.out.print(i+"\t");
}
temp++;
}
int sumbig2=sumbig+day2-1;// sumbig2 为后一个日期加上当天数的,到1900.1.1的相差天数的总和 :注 加上当天日期就不用加1了
System.out.println("\n---------------------"+sumsmall);
System.out.println("\n--------------------------------------"+sumbig2);
System.out.println("\n两日期相差"+(sumbig2-sumsmall)); // 两日期相差的天数
System.out.println(count+"------------------------------");
switch (sumbig2%7){
case 1:
System.out.println("今天星期一");break;
case 2:
System.out.println("今天星期二");break;
case 3:
System.out.println("今天星期三");break;
case 4:
System.out.println("今天星期四");break;
case 5:
System.out.println("今天星期五");break;
case 6:
System.out.println("今天星期六");break;
default:System.out.println("今天星期日");break;
}
}
}
到此基础题就暂时结束啦!当做到新的题我会继续更新的!
之后会更新面向对象的基础题!