华为机试
来源:互联网 发布:js placeholder赋值 编辑:程序博客网 时间:2024/05/16 01:51
1. 整数拆分问题
一个整数总可以拆分为2的幂的和,例如:
7=1+2+4
7=1+2+2+2
7=1+1+1+4
7=1+1+1+2+2
7=1+1+1+1+1+2
7=1+1+1+1+1+1+1
统共有六种不合的拆分体式格式。
1. 题目解答
题目分析
对于奇数n=2k+1:它的拆分的第一项必然是1,推敲去掉这个1,其实就一一对应于 2k的拆分,是以f(2k+1)=f(2k).
对于偶数n=2k:推敲有1和没有1的拆分。有1的拆分,与(2k-1)的拆分一一对应,与上方奇数的景象来由雷同;没有1的拆分,将每项除以2,正好一一对应于k的所有拆分。是以f(2k)=f(2k-1)+f(k).
public static void main(String[] args) { Scanner s = new Scanner(System.in); while(s.hasNextInt()) { int n = s.nextInt(); int[] f = new int[1000001]; f[1] = 1; for(int i = 2; i <= n; i++) { if(i % 2 == 0) { f[i] = (f[i-1] + f[i/2]) % 1000000000; }else { f[i] = f[i-1]; } } System.out.println(f[n]); } }
2. 大数相加
大数问题
public static String bigNumberAdd(String a, String b) { if(a == null || b == null || a.equals("") || b.equals("")) return null; StringBuilder result = new StringBuilder(); //反转 StringBuilder sbA = new StringBuilder(a).reverse(); StringBuilder sbB = new StringBuilder(b).reverse(); int lenA = sbA.length(); int lenB = sbB.length(); int maxLen = lenA > lenB ? lenA : lenB; boolean overflow = false; int nTakeOver = 0; //高位补零 if(lenA < lenB) { for(int i = lenA; i < maxLen; i++) { sbA.append("0"); } }else if(lenA > lenB) { for(int i = lenB; i < maxLen; i++) { sbB.append("0"); } } System.out.println(sbA.toString()); System.out.println(sbB.toString()); for(int i = 0; i < maxLen; i++) { //加进位 int nSum = Integer.parseInt(sbA.charAt(i)+"") + Integer.parseInt(sbB.charAt(i)+"") + nTakeOver; if(nSum >= 10) { if(i == (maxLen-1)){ overflow = true; } nTakeOver = 1; result.append(nSum-10); }else { nTakeOver = 0; result.append(nSum); } } if(overflow) { result.append(nTakeOver); } return result.reverse().toString(); }
3. 整数排序
实现输入一组大于零的整数,根据从小大数排序,排序后有连续数时,只输出最小和最大的数
输入: 1, 4, 3, 110, 2, 90, 7
输出: 1 4 7 90 110
//相等也算连续 public static void sortInteger(int[] arr) { if(arr == null || arr.length == 0) return; Arrays.sort(arr); int len = arr.length; int min = 0, max = 0; for(int i = 0; i < len; i++) { min = max = arr[i]; System.out.print(min + " "); if(i == (len-1)) break; while((arr[i+1] - 1) == arr[i] || arr[i+1] == arr[i]) { i++; max = arr[i]; if(i == (len-1)) break; } if(min != max) System.out.print(max + " "); } }
0 0
- 华为机试
- 华为机试
- 华为机试
- 华为机试
- 华为机试4
- 华为机试
- 华为机试
- 华为机试-2014
- 华为机试
- 华为机试2014
- 华为机试
- 华为机试
- 华为机试整理
- 2014华为机试
- 历年华为机试
- 华为机试---最小公倍数
- 华为机试---打渔晒网
- 华为机试
- 各种动画
- python os.execl记录下遇到的传参问题
- MFC CColorStatic
- perl
- Swift教程17-淡化MVC,使用MVVM框架开发轻巧便于维护的iOS app
- 华为机试
- Trapping Rain Water
- java学习之路- 程序打包成jar
- Linux 常用命令
- C语言学习---存储类
- Java和.Net在做BS结构项目的比较
- iOS常用正则表达式
- 本人使用的vim配置
- Intellij IDEA依赖同步及乱码问题