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

前几天码农网上以为资深工程师提出来的问题,一时间网上答案各种,这里我简单整理了一下,代码来源为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);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值