一、工资
假设税前工资和税率如下(s代表税前工资,t代表税率):
s<1000 t=0%
1000<=s<2000 t=10%
2000<=s<3000 t=15%
3000<=s<4000 t=20%
4000<=s t=25%
编写一程序,要求用户输入税前工资额,然后用多分支if语句计算税后工资额。
【输入形式】
从键盘输入税前工资s,可以是浮点数。
【输出形式】
输出税后工资额,保留小数后两位。
【输入样例】
3000
【输出样例】
2400.00
package com.my.test;
import java.util.Scanner;
public class Salary {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
double salary1;
double salary=sc.nextDouble();
if(salary<1000){
System.out.printf("%.2f",salary);
} else if (salary>=1000 && salary<2000) {
salary1=salary-(salary*0.10);
System.out.printf("%.2f",salary1);
} else if (salary>=2000 && salary<3000) {
salary1=salary-(salary*0.15);
System.out.printf("%.2f",salary1);
}else if (salary>=3000 && salary<4000){
salary1=salary-(salary*(double) (0.20));
System.out.printf("%.2f",salary1);
} else if (salary>=4000) {
salary1=salary-(salary*(double) (0.25));
System.out.printf("%.2f",salary1);
}
}
}
二、整数的交集a
从标准输入中输入两组整数(每组不超过20个整数,每组整数中的元素不重复,并且整数大于等于0),编程求两组整数的交集,即在两组整数中都出现的整数,并按从小到大顺序排序输出。若交集为空,则什么都不输出。
【输入形式】
在两行上分别输入两组整数,以一个空格分隔各个整数,以-1作为输入结束。
【输出形式】
按从小到大顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
【样例输入】
5 105 0 4 32 8 7 9 60 -1
5 2 87 10 105 0 32 -1
【样例输出】
package com.my.test;
import java.util.Arrays;
import java.util.Scanner;
public class Intersect {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int i=0,n=0,c=0,i1,n2;
int zu1[]=new int[21];
int zu2[] =new int[21];
int zu3[]=new int[21];
Arrays.fill(zu3,-1);
zu1[i]=sc.nextInt();
while(zu1[i]!=-1)
{
i++;
zu1[i]=sc.nextInt();
}
i1=i;
zu2[n]=sc.nextInt();
while(zu2[n]!=-1)
{
n++;
zu2[n]=sc.nextInt();
}
n2=n;
for(i=0;i<i1;i++)
{
for(n=0;n<n2;n++)
{
if(zu1[i]==zu2[n])
{
zu3[c]=zu1[i];
c++;
}
}
}
Arrays.sort(zu3);
for(int a : zu3)
{
if(a!=-1)
System.out.print(a+" ");
}
}
}
三、简单加密系统
【问题描述】实现一个基于ASCII码的简单加密系统。
加密规则如下:
if (OriginalChar + Key > 126) then
EncryptedChar = ((OriginalChar + Key)-127) + 32
else
EncryptedChar = (OriginalChar + Key)
限定密钥是1~100之间的某个数字。原始消息全部由ASCII码组成,
编写加密解密功能,实现这个加密系统。输入密钥和一行明文,输出密文;再对密文解密,输出明文。
提示:String.charAt()方法可用于获取字符串中的某个字符
String.length()方法可返回字符串长度(字符个数)
Scanner.nextLine()方法可从键盘输入一行字符
package com.my.test;
import java.util.Scanner;
public class ASCii {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
char OriginalChar;
char Echar1[] =new char[15];
char Echar2[] =new char[15];
System.out.printf("Enter a message for encrypt: ");
String char1=sc.nextLine();
System.out.printf("Enter a key between 1 to 100: ");
int Key=sc.nextInt();
//int OriginalChar=char1.length();
for(int i=0;i<char1.length();i++) {
OriginalChar=char1.charAt(i);
if(OriginalChar + Key >126){
Echar1[i]=(char)(((OriginalChar + Key)-127)+32);
}else{
Echar1[i]=(char)(OriginalChar+Key);
}
}
String char2=String.valueOf(Echar1);
System.out.println("message: "+char1);
System.out.println("result: "+char2);
for(int i=0;i<char2.length();i++)
{
OriginalChar=char2.charAt(i);
if(OriginalChar-Key <32)
{
Echar2[i]=(char)(((OriginalChar-Key)+127)-32);
}else{
Echar2[i]=(char)(OriginalChar-Key);
}
}
String char3=String.valueOf(Echar2);
System.out.println("result: "+char2);
System.out.println("message: "+char3);
}
}
四、回文数
【问题描述】所谓回文数是指具有如下性质的整数:一个整数,当它的各位数字逆序排列,形成的整数与原整数相同,这样的数称为回文数。例如,素数11,373,其各位数字对换位置后仍然为11,373,因此这两个整数均为回文数。编写函数int loop(int x),判断一个整数是否为回文数,如果x是回文数则返回1,否则返回0。编写程序loop.c,接收控制台输入的两个整数a,b。调用loop函数输出a到b之间(包括a和b)的所有回文数
【输入形式】控制台输入两个整数a和b(必有a<b),以空格分隔。
【输出形式】输出有若干行,每行有一个a和b之间的回文数。输出各行上的数字不重复,且从小至大依次按序输出。
【样例输入】3 120
【样例输出】
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99
101
111
package com.my.test;
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class Palindrome {
public static void main(String[] args) {
Scanner sc =new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
List<Integer> array =new ArrayList<>();
array.addAll(loop(a,b));
print(array);
}
public static List<Integer> loop(int x, int y){
//判断x与y谁大谁小
if (x > y){
int temp = x;
x = y;
y = temp;
}
List array =new ArrayList<>();
for (int i = x;i <= y;i++){
String s = String.valueOf(i);
//String的reverse方法,反转字符,判断反转前后是否相等
String revers =new StringBuffer(s).reverse().toString();
if (s.equals(revers)){
//存入List
array.add(i);
}
}
return array;
}
//遍历List
public static void print(List<Integer> a){
for (Integer integer : a) {
System.out.println(integer);
}
}
}
五、人民币兑换
输入一个人民币的整数值(100以内以元为单位),编程找到用10元、5元、2元、1元表示的总数量的最小组合方式。
【输入形式】
从控制台输入一个整数值,表示以元为单位的人民币币值。
【输出形式】
向控制台输出四个整数(以空格分隔),分别表示兑换成的10元、5元、2元、1元人民币的数量,若没有某个币值,则对应输出0。
【样例1输入】
98
【样例1输出】
9 1 1 1
【样例1说明】
输入为98,表示98元人民币,把其兑换成10元、5元、2元、1元表示的总数量的最小组合方式为:9个10元,1个5元,1个2元,1个1元,故输出:9 1 1 1
【样例2输入】
11
【样例2输出】
1 0 0 1
package com.my.test;
import java.util.Scanner;
public class Yuan {
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int Y=sc.nextInt();
int a=Y/10;
int b=Y%10;
int c=b/5;
int d=b%5;
int e=d/2;
int f=d%2;
int g=f/1;
int h=f%1;
System.out.println(a+" "+c+" "+e+" "+g);
}
}
六、次数
整数出现次数 【问题描述】 输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。 【输入形式】 先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。 【输出形式】 在标准输出上输出出现次数最多的整数及其出现次数,两者以一个空格分隔;若出现次数最多的整数有多个,则按照整数升序分行输出。 【样例输入】 10 0 -50 0 632 5813 -50 9 -50 0 632 【样例输出】 -50 3 0 3 【样例说明】 输入了10个整数,其中出现次数最多的是-50和0,都是出现3次 |
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 读取整数的个数
int n = scanner.nextInt();
Map<Integer, Integer> countMap = new HashMap<>();
// 读取一组无序的整数
for (int i = 0; i < n; i++) {
int num = scanner.nextInt();
countMap.put(num, countMap.getOrDefault(num, 0) + 1);
}
// 找出出现次数最多的整数及其出现次数
int maxCount = Collections.max(countMap.values());
List<Integer> mostFrequentNums = new ArrayList<>();
for (Map.Entry<Integer, Integer> entry : countMap.entrySet()) {
if (entry.getValue() == maxCount) {
mostFrequentNums.add(entry.getKey());
}
}
// 按照整数升序输出
Collections.sort(mostFrequentNums);
for (int num : mostFrequentNums) {
System.out.println(num + " " + maxCount);
}
}
}