问题描述:
1、计算应缴金额
商场根据会员积分打折:
2000 分以内打 9 折,
4000 分以内打 8 折,
8000 分以内打 7.5 折,
8000 分以上打 7 折,使用 if-else-if 结构,实现手动输入购物金额和积分,
计算出应缴金额
代码:
package homework;
import java.util.Scanner;
public class first {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入商品的原价:");
double price = input.nextDouble();
System.out.println("请输入您的会员积分:");
int integral = input.nextInt();
if(integral>=8000) { //integral>=8000
price = 0.7*price;//7折
}else if(integral>=4000) {//4000<=integral<8000
price = 0.75*price;//7.5折
}else if(integral>=2000) {//2000<=integral<4000
price = 0.8*price;//8折
}else {//integral<2000
price = 0.9*price;//9折
}
System.out.println("您应缴纳的金额为: "+price+"元");
}
}
2、计算该年该月天数
一年中有 12 个月,而每个月的天数是不一样的。其中大月 31 天,分别为
1,3,5,7,8,10,12 月,小月 30 天,分别 为 4,6,9,11 月。还有二月比较特殊,平年的二月只有 28 天,而闰年的二月有 29 天,由用户在控制台输入年份和月份,
程序计算该年该月的天数。
代码:
package homework;
import java.util.Scanner;
public class second {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入你查询的年份:");
int year = input.nextInt();
System.out.println("请输入你查询的月份:");
int month = input.nextInt();
int day;
//判断是否为闰年
if(year%4==0 && year%100!=0 || year%400==0) {
day = 29; //平年的二月只有29天
}else {
day = 28; //闰年的二月只有28天
}
switch(month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(year+"年"+month+"月只有31天");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(year+"年"+month+"月有30天");
break;
case 2:
System.out.println(year+"年"+month+"月有"+day+"天");
}
}
}
3、图形打印任务 在控制台中,编写三个 Demo,分别输出如下图形: ![在这里插入图片描述](https://img-blog.csdnimg.cn/2021030721491426.png) 图形考查多重循环
代码:
图1代码:
package homework;
public class third {
/**
* 图1
* 外层循环控制行数:5
* 内层循环控制列数: 第一行时循环1次,第二行时循环2次,第三行时循环3次,...第五行时循环5次
* @param args
*/
public static void main(String[] args) {
for(int i=0;i<5;i++) {
for(int j=0;j<=i;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
图2 代码如下:
package homework;
public class third2 {
/**
* 图2
* 外层循环控制行数:5
* 内层循环控制列数: 第一行时循环5次,第二行时循环4次,第三行时循环3次,...第五行时循环1次
* 这种与图1 是反向的,也就是内层从5开始,依次递减,每次j>i
* @param args
*/
public static void main(String[] args) {
for(int i=0;i<5;i++) {
for(int j=5;j>i;j--) {
System.out.print("*");
}
System.out.println();
}
}
}
图3 代码如下:
package homework;
public class third3 {
/**
* 图2
* 外层循环控制行数:5
* 内层循环控制列数: 第一行时循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次,第9行时循环1次
* 也就是内层的j<2*i+1,但是每次都是空格先出现,而*是后边才出现
* 空格循环控制列数: 第一行前面4次,第二行前面3次,第三行前面2次,第4行前面1次;比i少了1次
* @param args
*/
public static void main(String[] args) {
for(int i=0;i<5;i++) {
for(int x=i+1;x<5;x++) {
System.out.print(" ");
}
for(int j=0;j<2*i+1;j++) {
System.out.print("*");
}
System.out.println();
}
}
}
4、打印九九乘法表 ,效果如图:
代码如下:
package homework;
public class quarter {
/**
* 9x9乘法表
* j<=i
* @param args
*/
public static void main(String[] args) {
System.out.println("乘法口诀表:");
for(int i=1;i<=9;i++) {
for(int j=1;j<=i;j++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
}
}
5、打印三位数中的所有水仙花数
所谓“水仙花数”即一个整数满足其值等于各个数位的立方和。
如: 153 是一个水仙花数,因为 153= 1³+5³+3³
考查位数
代码如下:
package homework;
public class fifth {
/**
* 考查位数
* 三位数,求每个位的数,使用余数和除数
* 三位数的范围:100~999
* @param args
*/
public static void main(String[] args) {
shuiXianHua();
}
public static void shuiXianHua() {
int a = 0;
int b = 0;
int c = 0;
for(int i=100;i<1000;i++) {
a=i/100;
b=(i%100)/10;
c=(i%100)%10;
if((a*a*a+b*b*b+c*c*c) == i) {
System.out.print(i+" ");
}
}
}
}
人工智能的概念刚兴起时,网上流传了一段价值一个亿的代码,如下图:
代码如下:
import java.util.Scanner;
public class AI {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String question;
while(true) {
question = scanner.next();
question = question.replace("吗","");
question = question.replace("我","我也");
question = question.replace("?", "!");
System.out.println(question);
}
}
}
今天同学们相约一起爬山游玩,为了更好的进行这场活动,大家准备推举
一个人作为出游的临时队长。为了体现合理公平,大家提出了一个比较有趣的
规则。所有人围成一圈,顺序排号。从第一个人开始报数(从 1 到 3 报数),
凡报到 3 的人退出圈子,剩下的人继续报数,最后留下的当选为队长。
请你通过编写程序,求出一组人中的队长是原来第几位同学。
import java.util.Scanner;
public class dengshan {
/**
* 思路:
* 1.先将所有人定义成一个Boolean型数组,初始值为true,报到3的人变成false
* 2.定义剩余人数,初始报数为1,并计算已经报完的人数
* 3.当已经报完人数和剩余人数相等时,说明一圈结束,开始新的循环,计数归0,最好输出值为true的人,即为队长
* @param args
*/
public static void main(String[] args) {
int total; //定义总人数
Scanner scanner = new Scanner(System.in);
System.out.println("输入围成一圈的人数");
total = scanner.nextInt();
boolean nums[] = new boolean[total];
for(int i=0;i<total;i++) {
nums[i] = true; //给每个人都赋值为true
}
int leftNum = total; //剩余人数
int numN = 0; //开始报数
int index = 0; //计数
while(leftNum > 1) {
if(nums[index] == true) {
numN ++;
if(numN == 3) {
numN = 0; //重新报数,归0
nums[index] = false;//当然该索引的位置置为false,表示不存在了
leftNum--;//剩余的人数自然减一
}
}
index++; //索引往后移动
if(index == total) {
//如果所有人都遍历后,则重新开始
index = 0;
}
}
//找出队长
for(int i=0; i<total; i++) {
if(nums[i] == true) {
//找出剩下的人
System.out.println("队长是原来第"+(i+1)+"位同学");
}
}
}
}
1、查找某个整数
定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。 然后将输
入一个整数,查找此整数,找到输出下标, 没找到给出提示。
import java.util.Scanner;
public class num1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] nums = new int[10];
System.out.println("请输入10个整数数字: ");
for(int i=0;i<nums.length;i++) {
nums[i] = input.nextInt();
}
System.out.println("请输入你要查找的一个整数数字: ");
int index = input.nextInt();
int i=0;
while(i<nums.length) {
if(nums[i] == index) {
System.out.println("该整数位于数组下标为"+i+"的位置");
}
if(nums[i] != index) {
System.out.println("数组下标为"+i+"的位置没有找到!");
}
i++;
}
}
}
2、找出数组的最值
定义一个长度为 10 的整型数组 nums ,循环输入 10 个整数。输出数组
的最大值、最小值。
import java.util.Scanner;
public class num2 {
/**
* 考查双目运算 :
* 最大值 n = n>nums[i]?n:nums[i];
* 最小值 n = n<nums[i]?n:nums[i];
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
//定义长度为10的整型数组,循环输入10个整数
System.out.println("请输入10个整数: ");
int[] nums = new int[10];
for(int i=0;i<nums.length;i++) {
nums[i] = input.nextInt();
}
//定义最大值,最小值
int maxIndex = nums[0];
int minIndex = nums[0];
for(int i=0;i<nums.length;i++) {
maxIndex = (maxIndex>nums[i])?maxIndex:nums[i];
minIndex = (minIndex<nums[i])?minIndex:nums[i];
}
System.out.println("该数组的最大值为: "+maxIndex);
System.out.println("该数组的最小值为: "+minIndex);
}
}
3、两数之和
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为
目标值的那两个整数,并输出他们的数组下标
假设每种输入只会对应一个答案,不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以输出 0,1
public class num3 {
/**
* 考查: 条件语句和逻辑运算
* @param args
*/
public static void main(String[] args) {
int[] nums = {2,7,11,15};
int target = 9;
for(int i=0;i<nums.length;i++) {
for(int j=1;j<nums.length;j++) {
if(nums[i] + nums[j] == target && i!=j) {
System.out.println(i+","+j);
}
}
}
}
}
4、排序并查找
对数组{1,3,9,5,6,7,15,4,8}进行排序,然后使用二分查找 6 并
输出排序后的下标。
import java.util.Scanner;
public class num4 {
/**
*
* 考查: 冒泡排序和二分查找(折半查找)
* @param args
*/
public static void main(String[] args) {
int[] nums = {1,3,9,5,6,7,15,4,8};
//冒泡排序
int temp;
//内层层循环控制: 比较的轮数
//外层循环次数: length-1
for(int i=0;i<nums.length-1;i++) {
//内层循环控制: 每轮比较的次数
//第i轮 (i从0开始计算), 比较次数为: length -i-1
for(int j=1;j<nums.length-i-1;j++) {
//两两比较, 满足移动条件
if(nums[j]>nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
}
}
System.out.println("经过排序后各数据的具体情况: ");
for(int i=0;i<nums.length;i++) {
System.out.println("下标:"+i+",具体数据:"+nums[i]);
}
//二分查找
//要查找的数据
Scanner input = new Scanner(System.in);
System.out.print("请输入要查找的数据: ");
int num = input.nextInt();
//1. 最小范围下标
int minIndex = 0;
//2. 最大范围下标
int maxIndex = nums.length-1;
//3. 中间数据下标
int centerIndex = (minIndex+maxIndex)/2;
while(true) {
if(nums[centerIndex] > num){
//中间数据较大
maxIndex = centerIndex-1;
}else if(nums[centerIndex] < num) {
minIndex = centerIndex+1;
}else {
//找到了数据,正好minIndex=maxIndex=centerIndex
break;
}
//查找的数据并不存在的情况
if(minIndex > maxIndex) {
centerIndex = -1;
break;
}
//当边界发生变化时, 需要更新中间下标
centerIndex = (minIndex+maxIndex)/2;
}
System.out.println("该数据的下标为: "+centerIndex);
}
}
5、移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保
持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
public class num5 {
/**
*
* 输入: [0,1,0,3,12] 输出: [1,3,12,0,0]
* 考查: 排序
* 思路: 冒泡排序&&逻辑语句
*
* @param args
*/
public static void main(String[] args) {
int[] nums = {0,1,0,3,12};
int temp;
//
for(int i=0;i<nums.length-1;i++) {
//内层控制循环:每轮比较的次数
for(int j=0;j<nums.length-i-1;j++) {
if(nums[j] < nums[j+1]) {
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
}
//冒泡从0开始排序,保证非零的数据相对位置不变
//第一次冒泡排序就可以将1提到下标为0的位置
//经过第一次冒泡排序后,零的数据就位于下标为1,2的位置.
//当非零数据排完后就将零的数据输出
if(j == 2 && i == 1) {
for(int k=0;k<nums.length;k++) {
System.out.print(nums[k]);
System.out.print(" ");
}
}
}
}
}
}