急 求 java 题 请高手解题

kingkim1127 2008-05-06 01:18:06
数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余的数代替该数字,再将第一位和第四位交换,第二位和第三位交换。请写出解密代码。

急急急急 急急急急 急急急急
...全文
245 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
nec_258 2008-06-20
  • 打赏
  • 举报
回复
  • 打赏
  • 举报
回复
实际上的数字就是tIndex-5


import java.util.*;
public class T2 {
public static void main(String[] args) {
String a,b,c,d;
String sa,sb,sc,sd;
int a1,b1,c1,d1;
int a2,b2,c2,d2;

Scanner scn = new Scanner(System.in);
String s=scn.next();

a = s.substring(0,1);
b = s.substring(1,2);
c = s.substring(2,3);
d = s.substring(3,4);

a1 = Integer.parseInt(a);
b1 = Integer.parseInt(b);
c1 = Integer.parseInt(c);
d1 = Integer.parseInt(d);

a2 = (a1+5)%10;
b2 = (b1+5)%10;
c2 = (c1+5)%10;
d2 = (d1+5)%10;

sa = Integer.toString(a2);
sb = Integer.toString(b2);
sc = Integer.toString(c2);
sd = Integer.toString(d2);

System.out.println(sd+sc+sb+sa);

}

}
dryZeng 2008-06-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
你不会反向写吗?
而且,然后用和除以10的余的数代替该数字

这句话决定了,你不可能拿到原始的4位数了!
[/Quote]


对,
这个算法是不可逆的.
夜猫人 2008-06-02
  • 打赏
  • 举报
回复
路过.........

想说, 先有请求, 才会有回应, 建议先详细说明你想实现什么的功能, 别人才能更好解答.......

zhaoyong209 2008-05-14
  • 打赏
  • 举报
回复
在2008年05月12日 11点38分07秒,kingkim1127 给您发送的消息!
谢谢你的建议
你小学毕业了吗 毕业了之后再来跟我说话
是你没理解好题目
我希您以后说话用脑子说



------------------------------------------------

我对您会有这种言论感到十分的抱歉.我知道我错得很严重,尤其是随便写了一点东西之后居然就对您的态度不好,您是神圣不可侵犯的高人,象我这种需要仰视您的小学没毕业的人物实在不应该对您这种初中没毕业的人物有任何的诋毁心理的.在此感觉到内心万分的不安,特此道歉.万请接受.
zhaoyong209 2008-05-09
  • 打赏
  • 举报
回复
建议学编程之前先把数学搞到初中毕业。这样可以减少不少问题。
胡矣 2008-05-09
  • 打赏
  • 举报
回复
你是要得到一个解还是一组解 一个个试
skyqiang 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 bobor_2008 的回复:]
除以10的余的数代替该数字
--------------------------------

你这样写怎么可以得到原数呢?
[/Quote]
awusoft 2008-05-09
  • 打赏
  • 举报
回复
关键地方告诉你就行了.怎么输入还要写出来.你别学编程好了
zhaoyong209 2008-05-09
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 kingkim1127 的回复:]
你求的不对哦
要求的是随机输入4位得四位解码
你这个不是固定了吗
[/Quote]

...........................
你要的到底是程序还是算法?????
晕倒!!!
自己做一个接收输入不就可以了么????
写完整代码本来就只是为了方便你验证而已.......
郁闷了...........
Coder211 2008-05-08
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
你不会反向写吗?
而且,然后用和除以10的余的数代替该数字

这句话决定了,你不可能拿到原始的4位数了!
[/Quote]
反向思考就可以解决问题,但是为什么会是“不可能拿到原始的4位数了!”,我不赞同这个观点。
我说不清楚为什么,但是我知道在抽象代数里面关于循环群的问题,利用循环群的观点可以很清楚的解决这个疑问。
所以,我的看法是原始数据与加密后的数据是一一对应的
zhaoyong209 2008-05-08
  • 打赏
  • 举报
回复
// 如果没理解错,规则应该是先按单个数字+5并%10之后再代替原来单个数据.
// 那么这个加密和解密程序是完全一样的,也就是说单次调用为加密,双次调用为解密.

import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.logging.*;
import java.util.prefs.*;
import javax.swing.*;
import javax.swing.event.*;

public class Test
{
public static void main(String[] args)
{
num=1234;
System.out.println(Turn(num));
System.out.println(Turn(Turn(num)));
}
private static int Turn(int num)
{
int i3,i2,i1,i0,rightnum;
i3=num/1000;
i2=(num-i3*1000)/100;
i1=(num-i3*1000-i2*100)/10;
i0=num%10;
i3=(i3+5)%10;
i2=(i2+5)%10;
i1=(i1+5)%10;
i0=(i0+5)%10;
rightnum=i0*1000+i1*100+i2*10+i3;
return rightnum;
}

private static int num;
}
nihuajie05 2008-05-08
  • 打赏
  • 举报
回复
要是非要用效率...用StringBuffer应该比较高....不需要重复新建字符串
nihuajie05 2008-05-08
  • 打赏
  • 举报
回复
public class code 
{

public static void main(String[] args)
{
int size=4;
int[] a=new int[size];
int[] b=new int[size];
int[] swaporder=new int[size];
int modnumber=10;
int plusnumber=7;
Random ran=new Random();
for(int index=0;index<size;index++)
{
a[index]=ran.nextInt(modnumber);
System.out.print(a[index]);
}
System.out.println();

a=exe(a,b,modnumber,plusnumber);
for(int index=0;index<4;index++)
System.out.print(a[index]);
System.out.println();
a=rexe(a,b,modnumber,plusnumber);
for(int index=0;index<4;index++)
System.out.print(a[index]);
System.out.println();
}
public static int[] exe(int[] a,int[] b,int modnumber,int plusnumber)
{
for(int index=a.length;index>0;index--)
{
b[index-1]=(a[index-1]+plusnumber)/modnumber;
}
a[0]=(a[0]+plusnumber)%modnumber;
a[1]=(a[1]+plusnumber)%modnumber;
a[2]=(a[2]+plusnumber)%modnumber;
a[3]=(a[3]+plusnumber)%modnumber;
swap(a);
swap(b);
return a;
}
public static int[] rexe(int[] a,int[] b,int modnumber,int plusnumber)
{
for(int index=0;index<a.length;index++)
a[index]+=b[index]*modnumber-plusnumber;
swap(a);
return a;
}
public static void swap(int[] a)
{
a[0]+=a[2];
a[2]=a[0]-a[2];
a[0]=a[0]-a[2];
a[1]+=a[3];
a[3]=a[1]-a[3];
a[1]=a[1]-a[3];
}
}
chief_fu 2008-05-08
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 AWUSOFT 的回复:]
Java code
int uu=4567;//加密后的值
String str = String.valueOf(uu);
String ff = str.charAt(3)+""+str.charAt(2)+""+str.charAt(1)+""+str.charAt(0);//倒序
String value="";//实际值的字符串
for(int i=0;i<ff.length();i++)
{
if(ff.charAt(i)-'0'<5)
{
value=value+(ff.charAt(i)-'0'+10-5);

[/Quote]

思路完全正确,怎么还有些人还看不懂吗?人家都写这个份上了。。。。。。

只是这样算法效率不咋地,建议用位运算或者数字运算,用字符串运算耗资源。
nihuajie05 2008-05-08
  • 打赏
  • 举报
回复
这个问题绝对是别人问过的...我还帖过代码...找来给你
awusoft 2008-05-08
  • 打赏
  • 举报
回复
不理解了.不是每一位都+5然后除以10的余数再代替这一个数字么?
kingkim1127 2008-05-08
  • 打赏
  • 举报
回复
我是这么解的希望大家参考并把它简单化
import java.util.*;
public class T2 {
public static void main(String[] args) {
String a,b,c,d;
String sa,sb,sc,sd;
int a1,b1,c1,d1;
int a2,b2,c2,d2;

Scanner scn = new Scanner(System.in);
String s=scn.next();

a = s.substring(0,1);
b = s.substring(1,2);
c = s.substring(2,3);
d = s.substring(3,4);

a1 = Integer.parseInt(a);
b1 = Integer.parseInt(b);
c1 = Integer.parseInt(c);
d1 = Integer.parseInt(d);

a2 = (a1+5)%10;
b2 = (b1+5)%10;
c2 = (c1+5)%10;
d2 = (d1+5)%10;

sa = Integer.toString(a2);
sb = Integer.toString(b2);
sc = Integer.toString(c2);
sd = Integer.toString(d2);

System.out.println(sd+sc+sb+sa);

}

}
kingkim1127 2008-05-08
  • 打赏
  • 举报
回复
你求的不对哦
要求的是随机输入4位得四位解码
你这个不是固定了吗
加载更多回复(12)

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧