黑马程序员技术交流社区
标题:
一道关于数组的问题,一点思路都没有.求解
[打印本页]
作者:
黑马-张超
时间:
2013-4-25 21:09
标题:
一道关于数组的问题,一点思路都没有.求解
数据加密(思考题)
这个题综合程度较高,不会没关系,但是一定要先思考下,看看自己能想到哪些内容。最后我讲的时候听懂就行了。
某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。
请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。
例如:
int number = 123456;
/*
654321
10 9876
609871
*/
作者:
黑马-张超
时间:
2013-4-25 21:10
这是老师留给我们的思考题.想了很久都没有一点思路,有没有大神会的啊!
作者:
孙百鑫
时间:
2013-4-25 21:41
不知道你学到哪里了...
我的思路是
1.定义一个函数.把数组穿进去
2.在函数内从新定义一个数组
3.在函数把函数反转
4.用for循环遍历...遍历的过程中进行加5 和%10的运算.并且完后存进新的数组
5.循环结束后.将头角标和尾角标互换....然后
6.返回到主函数.
我的思路是这样的.....代码嘛...有的忘记了.要先看资料的..但是我说过的方法都有.
作者:
尹丽峰
时间:
2013-4-25 21:44
本帖最后由 尹丽峰 于 2013-4-26 00:05 编辑
个十百千万取出来,然后逐个进行加5 sum在除以10
public class encryption{
public static void main(String args[]) {
getNumber(1234567);
}
public static void getNumber(int number) {
int a = number / 1000000;
int b = number % 1000000 / 100000;
int c = number % 100000 / 10000;
int d = number % 10000 / 1000;
int e = number % 1000 / 100;
int f = number % 100 / 10;
int g = number % 10;
int arr[] = new int[] { a, b, c, d, e, f, g };//搞出来的存到数组里
EncryptData(arr);//倒序,加5 取模10 第1和最后一个换位
PrintArray(arr);//遍历数组
}
public static void EncryptData(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
int temp;
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
for (int i = 0; i < arr.length; i++) {
arr[i] = (arr[i] + 5) % 10;// 每位数加5,后模10
}
int temp;
temp = arr[0];
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;// // 第一位和最后一位互换
}
public static void PrintArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
复制代码
作者:
郭军亮
时间:
2013-4-25 21:51
1,先求出数的位数
2.再分别把每一位数分离出来放到数组中。
3.再把数组中的数反转
4.用for循环遍历...遍历的过程中进行加5 和%10的运算.并且完后存进新的数组
5.循环结束后.将头角标和尾角标互换
6.最后把数组输出来。
其实思路和楼上的差不多。。。。。
作者:
一川
时间:
2013-4-25 22:27
class a{
public static void main(String args[]){
//int[] arr = new int[8];
int[] arr = {1, 2, 3,4, 5, 6};
PrintArray(arr);
EncryptData(arr);
PrintArray(arr);
}
//打印数组
public static void PrintArray(int[] arr){
for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static void EncryptData(int[] arr){
//倒叙
for(int i = 0; i < arr.length/2; i++){
int temp;
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
//每位数加5,后模10
for(int i = 0; i < arr.length; i++){
arr[i] = (arr[i] + 5) % 10;
}
//第一位和最后一位互换
int temp;
temp = arr[0];
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
}
}
复制代码
作者:
袁梦希
时间:
2013-4-25 22:34
加油 朋友们!
作者:
尹丽峰
时间:
2013-4-26 00:02
整合了一川的后半部分
public class encryption{
public static void main(String args[]) {
getNumber(1234567);
}
public static void getNumber(int number) {
int a = number / 1000000;
int b = number % 1000000 / 100000;
int c = number % 100000 / 10000;
int d = number % 10000 / 1000;
int e = number % 1000 / 100;
int f = number % 100 / 10;
int g = number % 10;
int arr[] = new int[] { a, b, c, d, e, f, g };//搞出来的存到数组里
EncryptData(arr);//倒序,加5 取模10 第1和最后一个换位
PrintArray(arr);//遍历数组
}
public static void EncryptData(int[] arr) {
for (int i = 0; i < arr.length / 2; i++) {
int temp;
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
for (int i = 0; i < arr.length; i++) {
arr[i] = (arr[i] + 5) % 10;// 每位数加5,后模10
}
int temp;
temp = arr[0];
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;// // 第一位和最后一位互换
}
public static void PrintArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
}
复制代码
作者:
袁梦希
时间:
2013-4-26 09:26
版主代理郑重提示:如果楼主问题已经解决那么。在自己发表的帖子下面,点“修改”,
然后把主题的分类标记成“已解决”。就OK了{:soso_e102:}
作者:
陈圳
时间:
2013-4-26 09:50
public static void main(String[] args) {
System.out.println(Arrays.toString(getNums(4758392)));
}
public static int[] getNums(int num){
int length=String.valueOf(num).length();
int arr[]=new int[length];
for(int i=0,temp=0;num>0;i++){
if((temp=num%10)>5)
arr[i]=temp-5;//大于5的数+5再%10实现相当于他本身-5
else arr[i]=temp+5;//小于的就是他本身+5了.
num/=10;
}
System.out.println(Arrays.toString(arr));//加上测试语句
arr[0]=arr[length-1]+(arr[length-1]=arr[0])*0;
return arr;
}
复制代码
这个简单些.扩展下你的思路吧.
作者:
黄玉昆
时间:
2013-4-27 20:10
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2