Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中棘手的面试问题_C_Puzzle - Fatal编程技术网

C语言中棘手的面试问题

C语言中棘手的面试问题,c,puzzle,C,Puzzle,在以下采访问题中: 给我一个数字,给我数字 (在3..5和偶数个 数字),其相加将返回 原来的号码。结果数字 应该尽可能保持平衡,, 这意味着不是返回3 和5,例如,返回4和 4。例: 7 = 3 + 4 16 = 4 + 4 + 4 + 4 rather than 3 + 5 + 4 + 4 24 = 12 + 12 or 6 + 6 + 6 + 6 我想到了以下方法: splitnumber(int n) { //check if the number is even if

在以下采访问题中:

给我一个数字,给我数字 (在
3..5
和偶数个 数字),其相加将返回 原来的号码。结果数字 应该尽可能保持平衡,, 这意味着不是返回
3
5
,例如,返回
4
4
。例:

7 = 3 + 4
16 = 4 + 4 + 4 + 4 rather than 3 + 5 + 4 + 4
24 = 12 + 12 or 6 + 6 + 6 + 6
我想到了以下方法:

splitnumber(int n)
{
    //check if the number is even
    if(n%2==0)
    {
        print(n/2,n/2);
        //check if x=2^m multiple exists or
        // not..like 4,8,16 etc
        print (n/x...n/x);
    }
    else //else if the no is odd... this part is incomplete
    {
        if(n-3>0)
        {
            print (3);

        }

        n-=3;
        if(n>0)
        {
            if (n>5)
            {
                print(3)
                n-=3;
            }
        }
    }
}
但我仍然不能完成所有的案子。。。如果(n<4)打印n,我应该如何检查答案是否有不平衡的解决方案??

if (n < 4) print n;
else
    switch (n % 4)
        case 0: *print n/4 4's*
        case 1: *print n/4 - 1 4's* print 5
        case 2: *print n/4 - 1 4's* print 3 print 3
        case 3: *print n/4 4's* print 3
其他的 交换机(n%4) 案例0:*打印编号4* 案例1:*打印n/4-14个*打印5个 案例2:*打印n/4-1 4的*打印3打印3 案例3:*打印件编号4个*打印件3个
在C语言中实现效率稍低#

if(n<4)控制台写入线(n);
其他的
交换机(n%4)
{
案例0:
Console.WriteLine(String.Join(“,新字符串('4',n/4).ToArray());
打破
案例1:
控制台写入线(
(String.Join(“,新字符串('4',n/4).ToArray().Skip(1))+
“5”).TrimStart());
打破
案例2:
控制台写入线(
(String.Join(“,新字符串('4',n/4).ToArray().Skip(1))+
“3”).TrimStart());
打破
案例3:
Console.WriteLine(String.Join(“),新字符串('4',n/4).ToArray()+
" 3"));
打破
}

以下是我的解决方案,结果将完全平衡,并检测不可能的情况:

vector<int> recursive_splitnumber(int n) {

    if (n <= 5) {
        return vector<int>(1,n);
    }

    int unbalancer = 0;
    vector<int> result1, result2;
    do {
        int val1, val2;
        if (n%2 == 0) {
            val1 = n%2 + unbalancer;
            val2 = n%2 - unbalancer;
        }
        else {
            val1 = (n-1)%2 + 1 + unbalancer;
            val2 = (n-1)%2 - unbalancer;
        }

        result1 = recursive_splitnumber(val1);
        result2 = recursive_splitnumber(val2);

        // Concatenate the result of the even and odd splits
        result1.insert(result1.end(),result2.begin(),result2.end());

        ++unbalancer;

    } while (result1.size()%2 != 0 && unbalancer <= 1);
    return result1;
}

bool splitnumber(int n) {
    vector<int> split = recursive_splitnumber(n);
    if (split.size()%2 == 0) {
        copy(split.begin(), split.end(), ostream_iterator<int>(cout, " "));
        return true;
    } else
        return false;
}
vector recursive\u splitnumber(int n){

如果(这是一个多么烦人的面试问题。如果这份工作是一个html开发人员,你会得到额外的分数。为什么
24
会被分解成
6+6+6+6
,而不是
4+4+4+4+4
?你可以有偶数……是的,4+4+4+4+4+4也是一个答案,
3..5
如果你可以使用任何整数,那意味着什么呢e解决方案必须打印偶数个数字?如果
n=11
则打印
4 3
@srgerg没有注意到这一点。对于11,没有只打印数字3、4和5以及偶数个数字的解决方案。为什么OP将其标记为可接受的解决方案,而它显然违反了原始要求?@Alex Reche Martinez:这意味着
11
的唯一正确输出是“不可能有解决方案”或类似的内容。
vector<int> recursive_splitnumber(int n) {

    if (n <= 5) {
        return vector<int>(1,n);
    }

    int unbalancer = 0;
    vector<int> result1, result2;
    do {
        int val1, val2;
        if (n%2 == 0) {
            val1 = n%2 + unbalancer;
            val2 = n%2 - unbalancer;
        }
        else {
            val1 = (n-1)%2 + 1 + unbalancer;
            val2 = (n-1)%2 - unbalancer;
        }

        result1 = recursive_splitnumber(val1);
        result2 = recursive_splitnumber(val2);

        // Concatenate the result of the even and odd splits
        result1.insert(result1.end(),result2.begin(),result2.end());

        ++unbalancer;

    } while (result1.size()%2 != 0 && unbalancer <= 1);
    return result1;
}

bool splitnumber(int n) {
    vector<int> split = recursive_splitnumber(n);
    if (split.size()%2 == 0) {
        copy(split.begin(), split.end(), ostream_iterator<int>(cout, " "));
        return true;
    } else
        return false;
}