Java基础编程作业2

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);
        }
    }
}

  • 8
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值