黑马程序员技术交流社区

标题: java学习提问 [打印本页]

作者: 172567430    时间: 2016-12-17 23:00
标题: java学习提问
在抗战时期都是采用电报传递消息的,假设要传递的数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上该数字与2的余数,再将第一位和第四位交换,第二位和第三位交换。    大神们,这题怎么做?实在想不出来啦!


作者: Mr_Maty    时间: 2016-12-19 23:19
int[4]之后按照规则来继续就可以了,一共就两个点:一个余数,一个数据交换

作者: seasonzhang    时间: 2016-12-21 14:08
public static int jiami(int x) {
                String str=Integer.toString(x);
                String s="";
                for(int i=0;i<str.length();i++)
                {
                        char temp=str.charAt(i);
                        int t=Integer.parseInt(temp+"");
                        t=t+t%2;
                        if(t>=10) t=t-10;
                        s=s+Integer.toString(t);
                }
                    StringBuffer sb=new StringBuffer(s);
                    sb=sb.reverse();
                    return Integer.parseInt(sb.toString());
               
        }
作者: seasonzhang    时间: 2016-12-21 16:37
代码已经给你了 你试一下看行不行
作者: 一片叶~    时间: 2016-12-30 21:03
复杂的写法,仅供参考
class Demo_Message{
    public static void main(String[] args) {
        Message ms =new Message("1234");
        try{
            ms.JiaMi();
        }catch(Exception e) {}
    }
}
//密码类
class Message {
    private String str;
   
    public Message() {}
    public Message(String str) {            //限制输入的密码必须为4位数字  
        if(str.length() == 4) {
            try{
                int num = Integer.parseInt(str);
                if(num >= 0 && num <10000) {
                    this.str = str;
                }
            } catch(Exception e) {
                System.out.println("请输入全为数字的密码!");
            }  
        } else {
            System.out.println("请输入4位数的密码!");
        }
    }
   
    public void setStr(String str) {
        this.str = str;
    }
   
    public String getStr() {
        return str;
    }
   
    public void JiaMi() {                    //实现加密
        char[] c = str.toCharArray();
        int[] arr = new int[4];
        
        for (int i = 0;i < 4 ;i++ ) {
            arr[i] = (c[i] - 48 + (c[i] - 48)%2 )%10;
        }
        
        for (int i = 0;i < 2 ;i++ ) {
            int temp =arr[i];
            arr[i] = arr[3-i];
            arr[3-i] = temp;
        }
        
        for (int i = 0;i < 4 ;i ++ ) {
            System.out.print(arr[i]);
        }
    }
}


作者: 袁志娜    时间: 2017-1-1 21:12

作者: gczsjj    时间: 2017-1-3 23:36
import java.util.Scanner;
class TranPassword {//将四位整数加密
        public static void main(String[] args) {
                Scanner sc = new Scanner(System.in);
                System.out.println("请输入要加密的内容:");
                int n = sc.nextInt(),ge,shi,bai,qian;
                //求每位数字
                ge = n % 10;
                shi = n / 10 % 10;
                bai = n / 100 % 10;
                qian = n / 1000 % 10;
                //每位数字都加上该数字与2的余数
                ge = ge + ge % 2;
                shi = shi + shi % 2;
                bai = bai + bai % 2;
                qian = qian + qian % 2;
               
                //再将第一位和第四位交换
                int temp;
                temp = ge;
                ge = qian;
                qian = temp;

                //第二位与第三位交换
                temp = shi;
                shi = bai;
                bai = temp;
                System.out.println("加密后的结果:");
                System.out.println("" + qian + bai + shi + ge);
        }
}

作者: guyouzhong    时间: 2017-1-22 09:15
基础题目吗不是,
作者: Dani3l    时间: 2017-1-24 14:40
其实。。我觉得解密才是难点。。。
如果每一位数字加密后还要余10的话情况太多了,只有10101010的时候答案是唯一的。
因为生成出来的数只能是偶数,
因为奇数余2 =1 ,奇数+1=偶数
偶数余2为0,怎么加都是本身。
加密后的结果是2 4 6 8 10。
相关要考虑的情况很多,但没办法做出唯一的结果。
作者: Dani3l    时间: 2017-1-24 14:40
总体来说这个加密算法。。是个垃圾。。
作者: cclucklyz    时间: 2017-1-25 20:56
先把每个位置的数求出来就简单了
作者: 咖啡easy灬    时间: 2017-1-26 22:47
基础班学完就可以独立做出来这个吗·
作者: Mbs2016    时间: 2017-1-27 02:14
路过看看





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2