概述
文章目录
- 1. 硬币找零,最少多少张纸币
- 2. 将序列排序
- 3. 判断两个矩形是否相交
- 4. 从字符串中提取整数
- 5. 编写注册验证功能
- 6. 分解数字相乘后的最大值
1. 硬币找零,最少多少张纸币
描述:有1,5,10,50,100元,分别有:a、b、c、d、e张纸币。
若需要支付k元,最少需要多少张纸币能找零,若无解则输出-1
package kdxf;
import java.util.HashMap;
import java.util.Scanner;
public class Test01 {
static HashMap<Integer,Integer> data = new HashMap<>();
static int res = Integer.MAX_VALUE;
static int[] num = {1,5,10,50,100};
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
for(int i=0;i<5;i++){
int p = sc.nextInt();
data.put(num[i],p);
}
int sum = sc.nextInt();
dfs(sum,0,4);
System.out.println(res==Integer.MAX_VALUE?-1:res);
}
public static void dfs(int sum,int count,int start){
if (sum ==0 ){
res = Math.min(res,count);
return;
}else{
for(int i=start;i>=0;i--){
if (num[i]<=sum&&data.get(num[i])!=0){
int money = data.get(num[i]);
int flag = 0;
if (money*num[i]<=sum){
count+=money;
data.put(num[i],0);
flag = sum - money*num[i];
}else{
int q = sum/num[i];
count+=q;
data.put(num[i],data.get(num[i])-q);
flag = sum - q*num[i];
}
dfs(flag,count,start-1);
return;
}
}
}
}
}
运行结果:
2. 将序列排序
描述:给出一个数字序列,需要输出排序过程
package kdxf;
import java.util.Scanner;
public class Test02 {
static int[] data;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
data = new int[num];
for(int i=0;i<num;i++){
data[i]=sc.nextInt();
}
sort(0,num-1);
}
public static void sort(int left,int right){
if (left>=right) return;
int start = left;
int end = right;
int now = data[left];
while (left<right){
int n;
int m;
while (left<right&&data[right]>now){
right--;
}
while(left<right&&data[left]<=now){
left++;
}
int tmp = data[right];
data[right] =data[left];
data[left] =tmp;
}
int p = data[start];
data[start] = data[left];
data[left] = p;
print();
sort(start,left-1);
sort(left+1,end);
}
public static void print(){
for(int i=0;i<data.length;i++){
if (i==data.length-1){
System.out.println(data[i]);
return;
}
System.out.print(data[i]+" ");
}
}
}
运行结果:
3. 判断两个矩形是否相交
描述:给定坐标:(0,0),(2,3),(1,2),(5,4)
判断前两个点对角线构成的矩形是否与后两个点构成的矩形相交
相交则输出1,否则输出0
package kdxf;
import java.util.Arrays;
import java.util.Scanner;
public class Test03 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] a = new int[2][2];
int[][] b = new int[2][2];
for(int i=0;i<2;i++){
a[i][0] = sc.nextInt();
a[i][1] = sc.nextInt();
}
for(int i=0;i<2;i++){
b[i][0] = sc.nextInt();
b[i][1] = sc.nextInt();
}
Arrays.sort(a,(o1, o2)->o1[0]-o2[0]);
Arrays.sort(b,(o1,o2)->o1[0]-o2[0]);
int aminx= Math.min(a[0][0],a[1][0]);
int amaxx= Math.max(a[0][0],a[1][0]);
int aminy= Math.min(a[0][1],a[1][1]);
int amaxy= Math.max(a[0][1],a[1][1]);
int bminx= Math.min(b[0][0],b[1][0]);
int bmaxx= Math.max(b[0][0],b[1][0]);
int bminy= Math.min(b[0][1],b[1][1]);
int bmaxy= Math.max(b[0][1],b[1][1]);
boolean res = find(aminx,aminy,bminx,bmaxx,bminy,bmaxy)||
find(aminx,amaxy,bminx,bmaxx,bminy,bmaxy)||
find(amaxx,aminy,bminx,bmaxx,bminy,bmaxy)||
find(amaxx,amaxy,bminx,bmaxx,bminy,bmaxy)||
find(bminx,bminy,aminx,amaxx,aminy,amaxy)||
find(bminx,bmaxy,aminx,amaxx,aminy,amaxy)||
find(bmaxx,bminy,aminx,amaxx,aminy,amaxy)||
find(bmaxx,bmaxy,aminx,amaxx,aminy,amaxy);
if (res) System.out.println(1);
else System.out.println(0);
}
public static boolean find(int x,int y,int xmin,int xmax,int ymin ,int ymax){
if (x>=xmin&&x<=xmax&&y>=ymin&&y<=ymax){
return true;
}else {
return false;
}
}
}
运行结果:
4. 从字符串中提取整数
描述:例如:1a2
输出:12
package kdxf;
import java.util.Scanner;
public class Test04 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String data = sc.nextLine();
int flag = 0;
for(int i=0;i<data.length();i++){
if (i==0&&data.charAt(i)=='-'){
flag =1;
System.out.print('-');
}
if (data.charAt(i)>='0'&&data.charAt(i)<='9'){
System.out.print(data.charAt(i));
}
}
System.out.println();
}
}
运行结果:
5. 编写注册验证功能
题目要求:编写注册验证功能
1.原系统中包括两个注册好的账号“zhangsan"和"lisi",要求新注册的账号用户名不能已经存在,否则输出”用户名已经存在“,中止程序。
2.密码必须是8到16位,且必须由数字和字母组成,否则输出”密码格式不正确“,中止程序。
3.手机号码必须是11位,且开头必须是1,否则输出”请输入正确的手机号“,中止程序
4.如果全部输入正确,输出”注册成功“
import java.util.Scanner;
public class demo02 {
public static void main(String[] args) {
//输入
Scanner sc=new Scanner(System.in);
System.out.println("请输入用户名");
int flag=0;
while(flag==0) {
String name=sc.next();
flag=user(name,flag);
if(flag==1) {
break;
}
System.out.println("请输入密码");
String passerword=sc.next();
flag=passerword(passerword,flag);
if(flag==1) {
break;
}
System.out.println("请输入手机号");
String phone=sc.next();
flag=phone(phone,flag);
if(flag==1) {
break;
}
System.out.println("注册成功");
break;
}
}
private static int phone(String phone, int flag) {
if(phone.charAt(0)!=1||phone.length()!=11) {
System.out.println("请输入正确的手机号");
flag=1;
}
return flag;
}
private static int passerword(String passerword, int flag) {
if(passerword.length()<8||passerword.length()>16) {
System.out.println("密码格式错误");
flag=1;
}
return flag;
}
private static int user(String name,int flag) {
if(name.equals("zhangsan")||name.equals("lisi")) {
System.out.println("该用户名已存在");
flag=1;
}
return flag;
}
}
6. 分解数字相乘后的最大值
题目要求: 将输入的数字n(n>=0)分解,然后让分解的数字相乘,求相乘后的最大值。
例如:
输入: 5
输出: 6
import java.util.Scanner;
public class demo03 {
public static void main(String[] args) {
//输入
Scanner sc=new Scanner(System.in);
System.out.println("请输入一个数字");
long n=sc.nextLong();
//处理
if(n==0) {
System.out.println(0);
}else if(n%2==0) {
long m=(n/2)*(n/2);
System.out.println(m);
}else {
long m=(n/2)*(n/2+1);
System.out.println(m);
}
}
}
最后
以上就是无心大白为你收集整理的Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值的全部内容,希望文章能够帮你解决Java笔试——2021届秋招编程题汇总1. 硬币找零,最少多少张纸币2. 将序列排序3. 判断两个矩形是否相交4. 从字符串中提取整数5. 编写注册验证功能6. 分解数字相乘后的最大值所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复