您的位置:首页 > 职场人生

程序员必须1小时内解决的5个编程问题

2015-05-17 23:25 495 查看
前几天码农网上以为资深工程师提出来的问题,一时间网上答案各种,这里我简单整理了一下,代码来源为JAVA吧,当然随着时间的推移各种版本答案还在不断涌现,大家仅供参考

package com.zsq.five;

public class Question1 {

/*

* 问题1

使用for循环、while循环写出3个函数来计算给定数列的总和。

*

* */

public static void main(String[] args) {

int a[] = {1,2,3,4,5};

int count3 = 0;

Question1 q = new Question1();

q.forCount(a);

q.whileCount(a);

//q.recursionCount(count3,a);

//递归计算

}

public void forCount(int[] a){

//for循环

int count = 0;

for(int i = 0;i<a.length;i++){

count +=a[i];

}

System.out.println("for循环算的count:-----------------"+count);

}

public void whileCount(int[] a){

//while循环

int index = 0;//遍历数组的标识符

int count2 = 0;

while(index<a.length){

count2 += a[index];

index++;

}

System.out.println("while循环算的count2:-----------------"+count2);

}

//public void recursionCount(int count3,int[] a){}

}

package com.zsq.five;

import java.util.ArrayList;

import java.util.List;

public class Question2 {

/*

* 问题2

编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],

函数返回[a,1,B,2,C,3]。

*

* */

public static void main(String[] args) {

List a = new ArrayList<>();

List b = new ArrayList<>();

List c = new ArrayList<>();

a.add("A");

a.add("B");

a.add("C");

b.add(1);

b.add(2);

b.add(3);

for (int i = 0; i < a.size(); i++) {

c.add(a.get(i));

c.add(b.get(1));

}

System.out.println(c);

}

}

package com.zsq.five;

import java.math.BigInteger;

import java.util.Scanner;

public class Question3 {

/*

* 问题3

编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,

随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:

0,1,1,2,3,5,8,13,21,34

* */

public static void main(String[] args) {

System.out.println("请输入一个整数(1-100)");

int n=new Scanner(System.in).nextInt();

BigInteger r=g(n);

System.out.println("第"+n+"个波纳费锲数是:"+r);

}

private static BigInteger g(int n) {

BigInteger a=BigInteger.valueOf(1);

BigInteger b=BigInteger.valueOf(1);

if(n==1){

return BigInteger.valueOf(0);

}

else if(n==2|n==3){

return BigInteger.valueOf(1);

}

for (int i=4;i<=n;i++){

//这是BigInteger的封装好的加法

b=a.add(b);

//减法

a=b.subtract(a);

}

return b;

}

}

package com.zsq.five;

import java.util.Arrays;

import java.util.Comparator;

public class Question4 {

public static void main(String[] args) {

/*

* 问题4

编写一个能将给定非负整数列表中的数字排列成最大数字的函数。

例如,给定[50,2,1,9],最大数字为95021。

*

* */

int[] array = {7,62,9,997,423,44,54,123};

String[] arrStr = new String[array.length];

for(int i=0;i<array.length;i++){

arrStr[i]=array[i]+"";

}

Arrays.sort(arrStr, new Comparator<String>() {

public int compare(String s1,String s2) {

int len = s1.length()<s2.length()?s1.length():s2.length();

for(int i=0;i<len;i++){

if(s1.charAt(i)>s2.charAt(i)){

return -1;

}else if(s1.charAt(i)<s2.charAt(i)){

return 1;

}

}

return 1;

}

});

String result = "";

for(int i=0;i<arrStr.length;i++){

result+=arrStr[i];

}

System.out.println(result);

}

}

package com.zsq.five;

import java.util.Stack;

public class Question5 {

/*

* 问题5

编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,

使得计算结果总是100的程序,并输出所有的可能性。

例如:1 + 2 + 34–5 + 67–8 + 9 = 100

* */

static int count=0;

static int countSum=0;

public static void execute(int start,Stack<Integer> stack,int sum,Stack<String> operate,final int N) {

if(start==N){

if(sum == 100){

for(int i=0;i<stack.size();i++){

System.out.print(stack.get(i));

if(i<operate.size()){

System.out.print(" "+operate.get(i)+" ");

}

}

System.out.println();

count++;

}

countSum++;

return;

}

int next = start+1;

//j=0代表两数之间相连,j=1代表加,j=2代表减;

for(int j=0;j<3;j++){

if(j==0){

int preInt = stack.pop();

int current = preInt * 10 + next;

stack.push(current);

if(!operate.isEmpty()&&operate.peek().equals("+")){

sum=sum - preInt + current;

}else if(!operate.isEmpty()&&operate.peek().equals("-")){

sum =sum + preInt - current;

}else {

sum=sum - preInt + current;

}

execute(next,stack,sum,operate,N);

//现场还原

int reback = stack.pop();

int preBack = reback/10;

stack.push(preBack);

if(!operate.isEmpty()&&operate.peek().equals("+")){

sum = sum - reback + preBack;

}else if(!operate.isEmpty()&&operate.peek().equals("-")){

sum = sum + reback - preBack;

}else {

sum = sum - reback + preBack;

}

}else if (j==1) {

sum = sum+next;

operate.push("+");

stack.push(next);

execute(next,stack,sum,operate,N);

operate.pop();

int addNum = stack.pop();

sum = sum - addNum;

}else if(j==2){

sum = sum - next;

operate.push("-");

stack.push(next);

execute(next,stack,sum,operate,N);

operate.pop();

int decNum = stack.pop();

sum = sum + decNum;

}

}

}

public static void main(String[] args) {

Stack<Integer>stack =new Stack<Integer>();

stack.push(1);

execute(1, stack, 1, new Stack<String>(),9);

System.out.println("相加等于100的组合数:"+count);

System.out.println("总共组合数"+countSum);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: