java算法题,公司的笔试题

问题描述

java算法题,公司的笔试题

suppose you have N cakes, N is an interger>0
// at each time, you can either eat 1 cake, or 2 cakes or 3 cakes
// PROBLEM: How many ways can you eat all N cakes
// for example, N = 4, (1,2,1) and (1,1,2) are considered to be different ways
// but (1,1,1,1) and (1,1,1,1) are considered to be the same way
求大神解答!!!!

解决方案

参考
http://bbs.csdn.net/topics/390360329
一样的问题,C#实现。
需要Java实现,请先采纳我的答案。

解决方案二:

我可以给你个思路,我没有时间要不然试试看能不能计算出来:
题目中假设只能吃1或2或3块也就是说只能在这三个里面选;
假设n是奇数,那么要保证是奇数,则必须是n个1或者n-2个1 +2或者n-3个1 +3或者n个3相加就没有了,
然后你将里面能排列的排一下就行了;
假设n是偶数的话也是一样的,不会很多的因为它们几个不会超过1或2或3的
这种分析你应付考试应该可以了

我花了不少时间帮你解决的,可感觉你没给高悬赏真没动力啊
如果回答对您有帮助,请采纳

解决方案三:

奇数还少了个:n-1个2 +1+1或n-2个2+3或n-2个2+1+2

解决方案四:

奇数部分还还少了2的运算你自己想吧;
第二个回答有欠缺的,请勿参考;

解决方案五:

用树解决吧。

package csdnA.EatCake;

public class Solution {

private int count = 0 ;

public int countCakeEat(int N){

    if(N==1){
        count = 1 ;
    }else{
        TreeNode root = new TreeNode(0,0);
        generateTree(N,root) ;
    }

    return count ;
}

private void generateTree(int N , TreeNode parent){
    TreeNode child1 = new TreeNode(1 , parent.sum+1) ;
    TreeNode child2 = new TreeNode(2 , parent.sum+2) ;
    TreeNode child3 = new TreeNode(3 , parent.sum+3) ;
    parent.child1 = child1  ;
    parent.child2 = child2 ;
    parent.child3 =child3;

    if(child1.sum<N){
        generateTree(N , child1) ;
    }else if(child1.sum==N){
        count++;
    }else{
        //do nothing
    }

    if(child2.sum<N){
        generateTree(N , child2) ;
    }else if(child2.sum==N){
        count++;
    }else{
        //do nothing
    }

    if(child3.sum<N){
        generateTree(N , child3) ;
    }else if(child3.sum==N){
        count++;
    }else{
        //do nothing
    }

}

/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub
    Solution s = new Solution() ;
    System.out.println(s.countCakeEat(4));
}

}

package csdnA.EatCake;

public class TreeNode {
int val;
int sum ;
TreeNode child1;
TreeNode child2;
TreeNode child3;

TreeNode(int x) {
    this.val = x;
}

TreeNode(int x , int sum) {
    this.val = x;
    this.sum = sum ;
}
/**
 * @param args
 */
public static void main(String[] args) {
    // TODO Auto-generated method stub

}

}

时间: 2024-08-07 12:35:36

java算法题,公司的笔试题的相关文章

百度知道-【java算法题】凑凑凑凑凑凑字数

问题描述 [java算法题]凑凑凑凑凑凑字数 题目:标题:猜字母???把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串.???接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母.??得到的新串再进行删除奇数位置字母的动作.如此下去,最后只剩下一个字母,请写出该字母./-----------------------------------从百度知道查看但是不懂 1024 和他的思维求大神解惑 /----------------------

java算法题

问题描述 写一个算法:有10000000种不同的整型数.发现其最大的100要素.实施时应执行速度的优化. 解决方案 import java.util.ArrayList;public class createDir {private static int num[] =new int [10000000];private static ArrayList<Object> ans=null;public static void main(String[] arg){for(int i = 0;i

被一道JAVA算法题难住了,请各位帮忙看下。

问题描述 数组 C[I] = A[I] + B[I] / 1,000,000.例如 A 和 B: A[0] = 0B[0] = 500,000 A[1] = 1B[1] = 500,000 A[2] = 2B[2] = 0 A[3] = 2 B[3] = 0 A[4] = 3B[4] = 0 A[5] = 5B[5] = 20,000则 C: C[0] = 0.5 C[1] = 1.5 C[2] = 2.0 C[3] = 2.0 C[4] = 3.0 C[5] = 5.02寻找一对下标(P, Q

雅虎公司C#笔试题(后半部份才是)_C#教程

包括问答题和选择题两部分,第1-30题不应该算在C#范畴.应该算是网络程序员笔试31题以后才算,.试试看,你能回答出多少题,可以通过雅虎的考试吗? Question 1. (单选) 在计算机网络中,表征数据传输可靠性的指标是 1. 传输率 2. 误码率 3. 信息容量 4. 频带利用率 Question 2. (单选) 以下关于链式存储结构的叙述中哪一条是不正确的? 1. 结点除自身信息外还包括指针域,因此存储密度小于顺序存储结构 2. 逻辑上相邻的结点物理上不必邻接 3. 可以通过计算直接确定

java 算法题 大侠们 帮帮忙 万分感谢

问题描述 有一个文本文件,有一千万条数据,每行是一个单词,如何统计出,最早出现10次的10个单词 解决方案 解决方案二:最早出现10次的10个单词?那貌似只能是最普通的linearsearchalgorithm解决方案三:用VECTORfor每次检查,没有就赋值为1,有则++,最后再FOR<10这法有点笨,不过应该行吧,就是一千万,多了点解决方案四:你用一个循环去查找空格位置个数啊,一个单词用一个空格符作为结尾来区别,找到一个循环变量i,自增加1:如果你要找到最先出现的十个单词,用一个数组arr

高分求解基本的java算法题

问题描述 例如:int[][] a={{1,2,3,4,5},{1,2,3,4,6},{1,2,3,4,7}};行合并的规则为:两行中只相差一个数字,就把相差的数字进行合并,例如将a进行行合并处理后,变为:int[][] b={{1,2,3,4,11},{1,2,3,4,7}};再对 b进行行合并后,变为:int[][] c={{1,2,3,4,18}};请用java写出能实现合并规则,行数最多可能为5万. 问题补充:jobar 写道 解决方案 试写一个:import java.util.Arr

要出发公司笔试题

前言 招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深.本篇文章为群里的小伙伴们去要出发公司的笔试题,由笔者整理并提供笔者个人参考答案.注意,仅供参考,不代表绝对正确. 参考答案不唯一,大家可以根据自己的理解回答,没有必要跟笔者的一样.参考笔者的答案,也许给你带来灵感! 题目照 1.编程规范问题 这题看不清楚,不过可以看得出来是编程规范问题.所以呢,笔者也就没有办法说明哪些不合理了.不过笔者曾经为公司的出过一个编程规范文档,后

java 笔试题-微软4月笔试题第二题,为什么本地运行没错,提交是RE,实在想不出来,求救!!

问题描述 微软4月笔试题第二题,为什么本地运行没错,提交是RE,实在想不出来,求救!! import java.util.ArrayList; import java.util.Scanner; public class Main { int allowS = 0;//rules allow数组大小 int denyS = 0; ArrayList<String> allow = new ArrayList<>();//用来存放动态变化的rules,整个类都要使用,则定义为实例变量

经典算法(9) 从归并排序到数列的逆序数对(微软笔试题)

首先来看看原题 微软2010年笔试题 在一个排列中,如果一对数的前后位置与大小顺序相反 ,即前面的数大于后面的数,那么它们就称为一个逆序数对.一个排列中逆序的总数就称为这个排列的逆序 数.如{2,4,3,1}中,2和1,4和3,4和1,3和1是逆序数对,因此整个数组的逆序数对个数为4,现在给定 一数组,要求统计出该数组的逆序数对个数. 计算数列的逆序数对个数最简单的方便就最从前向后依 次统计每个数字与它后面的数字是否能组成逆序数对.代码如下: #include <stdio.h> int ma