1. 输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;另外数组的长度不超过50。
/**
*CountMinAddMax.java
*/
package interview.huawei;
/**输入整型数组求数组的最小数和最大数之和,例如输入1,2,3,4则输出为5,当输入只有一个数的时候,则最小数和最大数都是该数,例如只输入1,则输出为2;
* 另外数组的长度不超过50
* @author xuhongbin
* @data2014年9月20日下午7:10:16
*/
public class CountMinAddMax {
public static int add(int[] num){
int min = num[0];
int max = num[0];
for(int temp : num){
if(temp > max){
max = temp;
}
if(temp < min){
min = temp;
}
}
return min+max;
}
/**
* @param args
*/
public static void main(String[] args) {
int[] t = new int[50];
for(int i = 0; i < t.length; i++){
t[i] = (int) (Math.random()*10);
System.out.print(" " + t[i]);
}
System.out.println( );
System.out.println(add(t));
}
}
具体代码:
/**
*AddBigNum.java
*/
package interview.huawei;
/**
* @author xuhongbin
* @data2014年9月20日下午7:24:27
*/
public class AddBigNum {
public static void addBigNum(char[] a, char[] b, char[] conse){//存放结果的数组比加数多一位用于存储可能发生的进位。
int jinwei = 0;
int temp;
int al = a.length-1;
int bl = b.length-1;
int index = conse.length-1;
for(;al>=0&&bl>=0;al--,bl--,index--){
temp = a[al]+b[bl]+jinwei;
jinwei =(temp>=10? 1:0);
conse[index] = (char) (temp%10);
}
while(al >= 0){
temp = a[al]+jinwei;
conse[index--] = (char) (temp%10);
jinwei =(temp>10? 1:0);
al--;
}
while(bl >= 0){
// System.out.println(jinwei);
temp = b[bl]+jinwei;
conse[index--] = (char) (temp%10);
jinwei =(temp>=10? 1:0);
bl--;
}
conse[index] = (char) jinwei;
}
public static void main(String[] args) {
char[] a = {9,2,3};
char[] b = {2,9,4,5,6};
for(char c: a){
System.out.print((int)c);
}
System.out.println();
for(int i = 0; i<b.length;i++){
System.out.print((int)b[i]);
}
System.out.println();
char[] conse = new char[a.length>b.length? (a.length+1):(b.length+1)];
addBigNum(a, b, conse);
for(char c: conse){
System.out.print((int)c);
}
}
}
3. 一组人(n个),围成一圈,从某人开始数到第三个的人出列,再接着从下一个人开始数,最终输出最终出列的人 (约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。)
具体代码实现:
/**
*Josephus.java
*/
package interview.huawei;
import java.util.BitSet;
/**
* @author xuhongbin
* @data2014年9月20日下午9:46:48
*/
public class Josephus {
public static int printLastNode(int k, int m, int n){//k指从编号为k的人出发,m为从每次第m 个人出列,n为人数
BitSet bs = new BitSet(n);//BitSet存储的是该数字是否被访问过,访问过为true,未访问过为false;
int flag = 0;
int index = 0;
int count = 0;//表示将该表循环一次,没有任意一个数为false;
for(int i= k-1; i< n;i++){
// System.out.println(i-1);
if(!bs.get(i)){
count++;
flag++;
if(flag == m){
System.out.println("第"+(i+1)+"个人自杀!!!");
bs.set(i);
index = i;
flag= 0;
}
}
if(i == n-1&& count > 0){
i = -1;//特别注意该处i应初始化为-1,而非0,因为for循环还要对i进行+1操作。
count = 0;
}
}
return index+1;
}
public static void main(String[] args) {
System.out.println(printLastNode(1, 3, 41)); //最后两个人应该是16和31。ok
}
}
3. 字串转换
问题描述:
将输入的字符串(字符串仅包含小写字母’a'到’z'),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
要求实现函数:
void convert(char *input,char* output)
【输入】 char *input , 输入的字符串
【输出】 char *output ,输出的字符串
【返回】无
具体代码如下:
/**
*Stringtranslation.java
*/
package interview.huawei;
/**
* 问题描述:
* 将输入的字符串(字符串仅包含小写字母’a'到’z'),按照如下规则,循环转换后输出:a->b,b->c,…,y->z,z->a;若输入的字符串连续出现两个字母相同时,后一个字母需要连续转换2次。
* 例如:aa 转换为 bc,zz 转换为 ab;当连续相同字母超过两个时,第三个出现的字母按第一次出现算。
* 要求实现函数:
* void convert(char *input,char* output)
* @author xuhongbin
* @data2014年9月21日上午9:55:11
* 【输入】 char *input , 输入的字符串
* 【输出】 char *output ,输出的字符串
* 【返回】无
*/
public class Stringtranslation {
public static void convert(char[] input,char[] output){
char c = input[0];
boolean flag = false;
output[0] = (char) (c=='z'? 'a':(c+1));
for(int i = 1; i < input.length; i++){
if(input[i] != input[i-1]||(input[i]==input[i-1]&&flag)){
flag = false;
output[i] = (char) (input[i]=='z'? 'a':input[i]+1);
}else{
output[i]= (char) (output[i-1]=='z'? 'a':(output[i-1]+1));
flag = true;
}
}
}
public static void main(String[] args) {
String input = "abcfgecdboikkndddav";
String right = "bcdghfdecpjlmoefebw";
System.out.println(right);
char[] output = new char[input.length()];
convert(input.toCharArray(),output);
for(char c : output){
System.out.print(c);
}
}
}
非常要注意flag的设定。