1-基于ASCII码的简单加密系统
【问题描述】实现一个基于ASCII码的简单加密系统。
加密规则如下:
if (OriginalChar + Key > 126) then
EncryptedChar = ((OriginalChar + Key)-127) + 32
else
EncryptedChar = (OriginalChar + Key)
限定密钥是1~100之间的某个数字。原始消息全部由ASCII码组成,
编写加密解密功能,实现这个加密系统。输入密钥和一行明文,输出密文;再对密文解密,输出明文。
提示:String.charAt()方法可用于获取字符串中的某个字符
String.length()方法可返回字符串长度(字符个数)
Scanner.nextLine()方法可从键盘输入一行字符
import java.util.Scanner;
public class zuoye02_1 {
public static void main(String[] args) {
int size=100;
char OriginalChar = 0;
char EncryptedChar1[]=new char[15] ;
char EncryptedChar2[] =new char[15];
Scanner sc=new Scanner(System.in);
System.out.print("Enter a message for encrypt: ");
String arr1;
arr1=sc.nextLine();
System.out.print("Enter a key between 1 to 100: ");
int Key=sc.nextInt();
for(int i=0;i<arr1.length();i++){
OriginalChar=arr1.charAt(i);
if (OriginalChar+Key>126)
EncryptedChar1[i] = (char) (((OriginalChar+Key)-127) + 32);
else
EncryptedChar1[i] = (char) (OriginalChar + Key);
}
String arr2= String.valueOf(EncryptedChar1); //将char变量转换成字符串
System.out.println("message: "+arr1);
System.out.println("result: "+arr2);
for(int i=0;i<arr2.length();i++){
OriginalChar=arr2.charAt(i);
if(OriginalChar-Key<32){
EncryptedChar2[i]=(char) (((OriginalChar-Key)+127) - 32);
}else{
EncryptedChar2[i]=(char) (OriginalChar - Key);
}
}
String arr3=String.valueOf(EncryptedChar2);
System.out.println("result: "+arr2);
System.out.println("message: "+arr3);
}
}
2-回文数
【问题描述】所谓“回文数”是指具有如下性质的整数:一个整数,当它的各位数字逆序排列,形成的整数与原整数相同,这样的数称为回文数。例如,素数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
import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;
public class zuoye02_2 {
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);
}
}
}
3-税率
【问题描述】
假设税前工资和税率如下(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
import java.util.Scanner;
public class zuoye02_3 {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
double s;
double t = 0;
s = in.nextFloat();
if(s < 1000){
System.out.printf("%.2f",s);
}
if(s >= 1000 && s < 2000){
t+=0.10;
s = s - (s * t);
System.out.printf("%.2f",s);
}
if(s >= 2000 && s < 3000){
t+=0.15;
s = s - (s * t);
System.out.printf("%.2f",s);
}
if(s >= 3000 && s < 4000){
t+=0.20;
s = s - (s * t);
System.out.printf("%.2f",s);
}
if(s >= 4000){
t+=0.25;
s = s - (s * t);
System.out.printf("%.2f",s);
}
}
}
4-人民币最小组合方式
【问题描述】
输入一个人民币的整数值(100以内以元为单位),编程找到用10元、5元、2元、1元表示的总数量的最小组合方式。
【输入形式】
从控制台输入一个整数值,表示以元为单位的人民币币值。
【输出形式】
向控制台输出四个整数(以空格分隔),分别表示兑换成的10元、5元、2元、1元人民币的数量,若没有某个币值,则对应输出0。
【样例1输入】
98
【样例1输出】
9 1 1 1
import java.util.Scanner;
public class zuoye02_4 {
public static void main(String[] args) {
Scanner c=new Scanner(System.in);
int RMB=c.nextInt();
int i10=0;int i5=0; int i2=0;int i1=0;
i10=RMB/10;
RMB=RMB-10*i10;
i5=RMB/5;
RMB=RMB-5*i5;
i2=RMB/2;
RMB=RMB-2*i2;
i1=RMB;
System.out.print(i10+" ");
System.out.print(i5+" ");
System.out.print(i2+" ");
System.out.print(i1+" ");
}
}
5-求两组整数的交集
【问题描述】
从标准输入中输入两组整数(每组不超过20个整数,每组整数中的元素不重复,并且整数大于等于0),编程求两组整数的交集,即在两组整数中都出现的整数,并按从小到大顺序排序输出。若交集为空,则什么都不输出。
【输入形式】
在两行上分别输入两组整数,以一个空格分隔各个整数,以-1作为输入结束。
【输出形式】
按从小到大顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
【样例输入】
5 105 0 4 32 8 7 9 60 -1
5 2 87 10 105 0 32 -1
【样例输出】
0 5 32 105
import java.util.Scanner;
import java.util.Arrays;
public class zuoye02_5 {
static int input(Scanner in){
int tempInt=in.nextInt();
while(tempInt<-1){
tempInt=in.nextInt();
}
return tempInt;
}
public static void main(String[] args) {
int i=0,n=0,x=0,i1,i2,min,t,j;
int arr1[]=new int[21];
int arr2[]=new int[21];
int array[]=new int[21];
Arrays.fill(array,-1);
Scanner in=new Scanner(System.in);
arr1[i]=input(in);
while(arr1[i]!=-1){
i++;
arr1[i]=input(in);
}
i1=i;
arr2[n]=input(in);
while(arr2[n]!=-1){
n++;
arr2[n]=input(in);
}
i2=n;
for(i=0;i<i1;i++){
for(n=0;n<i2;n++){
if(arr1[i]==arr2[n]){
array[x]=arr1[i];
x++;
}
}
}
Arrays.sort(array);
for(int a : array)
if(a!=-1)
System.out.print(a + " ");
}
}
6-
【问题描述】
输入一组无序的整数,编程输出其中出现次数最多的整数及其出现次数。
【输入形式】
先从标准输入读入整数的个数(大于等于1,小于等于100),然后在下一行输入这些整数,各整数之间以一个空格分隔。
【输出形式】
在标准输出上输出出现次数最多的整数及其出现次数,两者以一个空格分隔;若出现次数最多的整数有多个,则按照整数升序分行输出。
【样例输入】
10
0 -50 0 632 5813 -50 9 -50 0 632
【样例输出】
-50 3
0 3
import java.util.Scanner;
import java.util.Arrays;
public class zuoye02_6 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i,j,n;
int max;
int index=0;
n=sc.nextInt();
int a[] = new int[n+1];
int b[] = new int[n+1];
int c[] = new int[n+1];
Arrays.fill(c,-1);
for(i= 0;i < n;i++)
a[i]=sc.nextInt();
for(i= 0;i< n;i++){
for(j= 0;j< n;j++){
if(a[i] == a[j])
b[i]++;
}
}
max = b[0];
for(i= 1;i < n;i++){
if (max < b[i]){
max = b[i];
}
}
for(int m= 0;m < n;m++){
if(max == b[m]){
c[index]=a[m];
index++;
}
}
Arrays.sort(c);
if(c[0]!=-1)
System.out.println(c[0]+" "+ max);
for(int m= 0;m < n;m++){
if(c[m+1]!=-1&&c[m+1]!=c[m])
System.out.println(c[m+1]+" "+ max);
}
}
}