java学习练习(每个程序员1小时内必须解决的5个编程问题)
来源:互联网 发布:阿里专有云asp csp 编辑:程序博客网 时间:2024/05/21 14:00
前天在博客头条上看到这样一个帖子,《每个程序员1小时内必须解决的5个编程问题》http://www.codeceo.com/article/5-problems-programmer-1-hour.html
尝试做了一下,花时间比较长:
问题1
使用for循环、while循环和递归写出3个函数来计算给定数列的总和。问题2
编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。
问题3
编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。
问题4
编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。
问题5
编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。
天天都在学习,代码没有整理比较混乱,代码如下:
题一:
/** * 使用for循环、while循环和递归写出3个函数来计算给定数列的总和。 */public class T1 {public static void main(String[] args) {Integer[] uu={4,65,6,1,6,8,1,4,4};int y=for1(uu).intValue();System.out.println(y);int[] uu1={4,65,6,1,6,8,1,4,4};int k=dd(uu1,uu1.length);System.out.println(k);}//for循环,泛型public static <T> Number for1(T t[]){Number t1=0;int o=t.length;Number[] t2=new Number[o];if(t[0] instanceof Number){for(int i=0;i<o;i++){t2[i]=(Number)t[i];}for(int i=0;i<o;i++){t1=t2[i].doubleValue()+t1.doubleValue();}}return t1;}//while循环省略//递归static int dd(int t[],int p){int i=t.length-p;int pp=0;if(i-p<t.length){pp=dd(t,p-1)+t[i];}return pp;}}
题二:
/** * 问题2 * 编写一个交错合并列表元素的函数。例如:给定的两个列表为[a,B,C]和[1,2,3],函数返回[a,1,B,2,C,3]。 */public class T2 {public static void main(String[] args) {String[] str={"a","B","C"};int[] r={1,2,3};String[] str1=pp1(str,r);for(String d:str1){System.out.print(d+"\t");}}static String[] pp1(String[] str1,int[] p1){int l=str1.length+p1.length;String[] str2=new String[l];for(int i=0;i<l;i++){if(i%2==0){str2[i]=str1[i/2];}else{str2[i]=p1[i/2]+"";}}return str2;}}
题三:
/** * 问题3 * 编写一个计算前100位斐波那契数的函数。根据定义,斐波那契序列的前两位数字是0和1,随后的每个数字是前两个数字的和。 * 例如,前10位斐波那契数为:0,1,1,2,3,5,8,13,21,34。 */public class T3 {public static void main(String[] args) {int[] pp1=pp();for(int n:pp1){System.out.print(n+"\t");}}static int[] pp(){int[] pp=new int[100];pp[0]=0;pp[1]=1;for(int i=2;i<100;i++){pp[i]=pp[i-1]+pp[i-2];}return pp;}}
题四:
/** * 问题4 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。 */public class T4 {public static void main(String[] args) {int[] i={50,2,1,9};System.out.println(kk(i));}static int kk(int[] pp) {int o = pp.length;int p = 1;//列出枚举法所有的可能for (int i = 1; i <=o; i++) {p *= i;}//存放所有组合数的数组int[] pp1=new int[p];//将随机下标进行对比,符合条件放入数组int[][] pp2=new int[p][o];for(int i=0;i<p;){int[] ff=kk2(o);boolean temp=true;for(int j=0;j<i;j++){if(kk3(pp2[j],ff)){temp=false;}}if(temp){pp2[i]=ff;i++;}}
<span style="white-space:pre"></span>//得到组合后的数组for(int i=0;i<p;i++){pp1[i]=kk4(pp2[i],pp);}
<span style="white-space:pre"></span>//取最大值int max=0;for(int w=0;w<p;w++){System.out.println(pp1[w]);if(pp1[w]>max){max=pp1[w];}}return max;}//判断一个数的位数static int kk1(int p) {int re = 0;if (p == 0) {re = 1;} else {re++;int q = 0;while (q == 0) {if (p / 10 != 0) {p=p/10;re++;} else {q = 1;}}}return re;}//对下标进行随机排序static int[] kk2(int p1){int[] p=new int[p1];int o=p.length;int i=0;while(i<o){int u=(int)(Math.random()*o);boolean temp=true;for(int j=0;j<i;j++){if(u==p[j]){temp=false;}}if(temp){p[i]=u;i++;}}return p;}//判断两个int数组中元素是否相同static boolean kk3(int[] p1,int[] p2){boolean temp=true;//长度肯定相同在这不做判断int y=p1.length;for(int i=0;i<y;i++){if(p1[i]!=p2[i]){temp=false;break;}}return temp;}//将下标转化为数字,p存放的是pp的下标static int kk4(int[] p,int[] pp){int o=p.length;int rr=0;for(int i=0;i<o-1;i++){rr=(int) (pp[p[i]]+rr*Math.pow(10,kk1(pp[p[i]])));}return (int) (rr*Math.pow(10,kk1(pp[p[o-1]]))+pp[p[o-1]]);}}
题五:
/** * 问题5 编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。 例如:1 + 2 + * 34 – 5 + 67 – 8 + 9 = 100。 */public class T5 {public static void main(String[] args) {int s = (int) Math.pow(3, 8);int[][] p1 = new int[s][8];// 将p1进行赋值p1 = kk1(p1);int l1 = p1.length;for (int i = 0; i < l1; i++) {//kk5(p1[i], kk4(p1[i]));}}/** * 对p1数组进行赋值,总共有3的8次个长度为8的一维数组 * * @param p1 * @return */static int[][] kk1(int[][] p1) {// k为3的8次方int k = p1.length, p = 0;while (p < k) {int[] p2 = new int[8];for (int i = 0; i < 8; i++) {p2[i] = (int) (Math.random() * 3);}boolean temp = true;for (int i = 0; i < p; i++) {if (kk3(p1[i], p2)) {temp = false;break;}}if (temp) {p1[p] = p2;p++;}}return p1;}/** * 判断两个int数组中元素是否相同(复制于类T4) * * @param p1 * @param p2 * @return */static boolean kk3(int[] p1, int[] p2) {boolean temp = true;// 长度肯定相同在这不做判断int y = p1.length;for (int i = 0; i < y; i++) {if (p1[i] != p2[i]) {temp = false;break;}}return temp;}/** * 根据数组提供数据翻译成:加、减、空,返回处理后的数组int[] * * @param p * @return */static int[] kk4(int[] p) {int l = p.length;int i = 0, i1 = 0;int[] p2 = new int[l + 1];while (i < l + 1) {int o = i;for (int j = i; j < l; j++) {if (p[j] == 0) {i++;} else {break;}}int u1 = i - o, u2 = o + 1;for (int s = 0; s < u1; s++) {u2 = u2 * 10 + (++o) + 1;}p2[i1] = u2;i1++;i++;}return p2;}/** * 根据kk4处理好的数组和+-运算数组得最终处理结果,p为+-符号,p2为源数组 * * @param p * @param p2 */static void kk5(int[] p, int[] p2) {int l1 = p.length;int i = 0, j = 0, n = p2[0];while (true) {while (j < l1) {if (p[j] == 0) {j++;} else {break;}}if (j != l1) {switch (p[j]) {case 1:n = n - p2[i + 1];break;case 2:n = n + p2[i + 1];break;}j++;}i++;if (i == p2.length) {break;} else {if (p2[i] == 0) {break;}}}
<span style="white-space:pre"></span>//复制于上面部分,添加输出语句if (n == 100) {int q = 0, w = 0, e = p2[0];while (true) {while (w < l1) {if (p[w] == 0) {w++;} else {break;}}if (w != l1) {switch (p[w]) {case 1:e = e - p2[q + 1];System.out.print(p2[q] + "-");break;case 2:e = e + p2[q + 1];System.out.print(p2[q] + "+");break;}w++;}q++;if (q == p2.length) {break;} else {if (p2[q] == 0) {System.out.print(p2[q - 1]);break;}}}System.out.print("=" + e + "\n");}}}
0 0
- java学习练习(每个程序员1小时内必须解决的5个编程问题)
- 每个程序员1小时内必须解决的5个编程问题(未完成)
- 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题之难题
- 每个程序员1小时内必须解决的5个编程问题之多种方法
- 每个程序员1小时内必须解决的5个编程问题--解答代码
- 每个程序员1小时内必须解决的5个编程问题 - 个人答题
- 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题
- php版 - 每个程序员1小时内必须解决的5个编程问题
- 每个程序员1小时内必须解决的5个编程问题
- 1小时内必须解决的5个编程问题
- 程序员必须1小时内解决的5个编程问题
- 每个程序员半小时内必须解决的5个编程问题——php实现
- 5个编程问题(1小时解决)
- 程序员一个小时必须解决的第5题
- 每个Java程序员必须知道的5个JVM命令行标志
- 每个Java程序员必须知道的5个JVM命令行标志
- 解决Linux环境下Tomcat日志乱码的问题
- 将服务器安装的Windchill迁移到本地分区以便用于开发和测试
- Tomcat 解决中文路径的图片不能显示问题
- 基于动态时间规整的声控指令识别
- 169 Majority Element
- java学习练习(每个程序员1小时内必须解决的5个编程问题)
- 理解class.forName()
- 行星序列(AHOI2009)(线段树)
- Web - 发布网址更改方法
- Android 调用电话和短信
- .net 调用delphi 的DLL
- objdump && readelf
- 数据库查询优化原则
- web测试方法总结