A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 172567430 中级黑马   /  2016-12-17 23:00  /  1747 人查看  /  12 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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

12 个回复

倒序浏览
int[4]之后按照规则来继续就可以了,一共就两个点:一个余数,一个数据交换
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
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());
               
        }
回复 使用道具 举报
代码已经给你了 你试一下看行不行
回复 使用道具 举报
复杂的写法,仅供参考
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]);
        }
    }
}

回复 使用道具 举报
回复 使用道具 举报
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);
        }
}
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
基础题目吗不是,
回复 使用道具 举报
Dani3l 初级黑马 2017-1-24 14:40:02
9#
其实。。我觉得解密才是难点。。。
如果每一位数字加密后还要余10的话情况太多了,只有10101010的时候答案是唯一的。
因为生成出来的数只能是偶数,
因为奇数余2 =1 ,奇数+1=偶数
偶数余2为0,怎么加都是本身。
加密后的结果是2 4 6 8 10。
相关要考虑的情况很多,但没办法做出唯一的结果。
回复 使用道具 举报
总体来说这个加密算法。。是个垃圾。。
回复 使用道具 举报
先把每个位置的数求出来就简单了
回复 使用道具 举报
基础班学完就可以独立做出来这个吗·
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马