两个小的面试题

以下两个小问题是我在http://blog.csdn.net/xuxian361/article/details/49204169看到的,使用了不同的实现方法;有兴趣可以比较着看一下;


一: 给定一个由0-9纯数字组成的字符串,假设字符串的向量是由所有数字的乘积组成,字符串的标量是由所有数字的累加和组成。比如”12340”的向量是1*2*3*4*0=0,标量是1+2+3+4+0=10;”456”的向量是4*5*6=120,标量是4+5+6=15; 现给定一个字符串数组,请按字符串的向量降序排序,如果向量一样大,则按标量降序排序,如果还一样大则保持原来的顺序。

 *  测试样例1:输入是{“1230”, “304”}, 程序输出{“304”, “1230”};
 *  测试样例2:输入是{“38”, “46”, “47”}, 程序输出{“47”, “38”, “46};

实现代码:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class AboutSort {

	public static void main(String[] args) {
		List<String> list = new ArrayList<>();
		String[] str = new String[]{"38","46","47"};
		for(String ele: str)	list.add(ele);
		list.sort((String o1, String o2)-> {
				if(toVector(o1)<toVector(o2)) return 1;
				else if(toSum(o1)<toSum(o2)) return 1;
				else return -1;
			});
		System.out.println(list);
	}
	
	private static int toVector(String str){
		char[] chr = str.toCharArray();
		int result=0;
		int product=1;
		for(int i=0;i<chr.length;i++){
			result = Character.getNumericValue(chr[i]);
			product=product*result;
		}
		System.out.println(str+" "+product);
		return product;
	}
	
	private static int toSum(String str){
		char[] chr = str.toCharArray();
		int result=0;
		for(int i=0;i<chr.length;i++){
			result =result + Character.getNumericValue(chr[i]);
		}
		System.out.println(str+" "+result);
		return result;
	}
}

在实际的使用中不建议使用静态方法;

二:消息加密问题。给定一个长度为N字符串Msg,为了方便在网上传输而不被人截获,用一个长度为N的整数数组Key去加密,加密过程如下:Msg中第i(从0开始计数)个字符新的位置应该是Key[i]。同时给定一个整数count,表示整个加密将持续count次。求加密过后的字符串。
测试用例:

1)

"abcde"

{4, 3, 2,1, 0}

1

Returns:"edcba"

2)

"abcde"

{4, 3, 2,1, 0}

2

Returns:"abcde"

实现代码:
public class Encryption {
	private String str;
	
	public String getStr() {
		return str;
	}
	public void setStr(String str) {
		this.str = str;
	}
	
	public String ecrypts(int[]key,int count){
		while(count>0){
			char[] chrs=str.toCharArray();
			StringBuilder strs =new StringBuilder("");
				for(int i=0;i<key.length;i++)	strs.append(chrs[key[i]]);
				str=strs.toString();
			count--;
		}
		return str;
	}
	public static void main(String[] args){
		Encryption ecrpt = new Encryption();
		ecrpt.setStr("crf1205");
		int[] key = new int[]{6,5,4,3,2,1,0};
		int count =3;
		ecrpt.ecrypts(key, count);
		System.out.println(ecrpt.getStr());
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值