Simanzen 发表于 2014-5-27 01:33:41

多益网络面试题

本帖最后由 Simanzen 于 2014-5-27 12:31 编辑

小华和小明正在做游戏,规则如下:小明随便想一个整数A(首位不为0),去掉一个数得到B,小明把N(N是A和B之和)告诉小华(例如A=31,B=3,N=34,让小华猜小明想的数字。为了公平起见,小华如果猜27(因为27+7=34),也算小华胜利。
对于输入N(1<N<10^9),求出所有的解(从小到大排列)(需要尽可能的高效)
:cry哪位大神会啊能用C++写也是极好的:big

elvo 发表于 2014-5-27 01:33:42

下面是好友 后来 的程序,实现了寻找:
#include "stdafx.h"
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main(int argc, char* argv[])
{      
      void deletebit(char array[],int i);
      int n;
      printf("please input the value of n:");
      scanf("%d",&n);
      for(int a = 10; a < n ;a++)
      {
                int b = a;
                char array;
                itoa(a,array,10);
                char arraycopy;
                strcpy(arraycopy,array);
                int LEN = strlen(array);
                for(int i = 0; i < LEN; i++)
                {                        
                        deletebit(array,i);
                        int b = atoi(array);
                        if(a + b == n)
                        {
                              printf("%d + %d = %d\t",a,b,n);
                              break;
                        }
                        else
                              strcpy(array,arraycopy);
                }
                a = b;
      }
      system("pause");
      return 0;
}

void deletebit(char array[],int i)
{
      for(; i < strlen(array); i++)
      {
                array = array;
      }
}

sidfate 发表于 2014-5-27 09:41:25

"去掉一个数得到B" 是什么意思

765643729 发表于 2014-5-27 11:17:22

N是A和B之和
为什么 A=31,B=3,N=37
N为什么会=37?我世界观混乱了

Simanzen 发表于 2014-5-27 12:31:29

765643729 发表于 2014-5-27 11:17 static/image/common/back.gif
N是A和B之和
为什么 A=31,B=3,N=37
N为什么会=37?我世界观混乱了

是34,写错了

Simanzen 发表于 2014-5-27 12:32:46

sidfate 发表于 2014-5-27 09:41 static/image/common/back.gif
"去掉一个数得到B" 是什么意思

比如A=123,则B=12或13或23

elvo 发表于 2014-5-27 12:51:02

Simanzen 发表于 2014-5-27 12:32 static/image/common/back.gif
比如A=123,则B=12或13或23

按你的意思就是去掉一个数,这个数是一位数,即A=123,B=12或13或23.。。
那么可不可以去掉一个两个位数 即A=123 ,B=1或者3,再则,去掉的数必须是连续的不如12或23,可不可以是13,即A=123,B=2?

sidfate 发表于 2014-5-27 13:18:44

其实这个问题在于简化运算:
例如给定一个数 N ,加入 N 的位数为 W,假设输出为 S 。

如果 N 的最高位为 1 时(N 为 1XX... ,S-1 个 X),则输出的 S 的范围在 9XX...(S-2 个X)到
300...(S-1 个0)之间(具体的数学运算的进位知识)。

一次类推你就找到了缩小的搜索输出的数的范围。

接下来就做运算匹配。

Simanzen 发表于 2014-5-27 13:24:44

elvo 发表于 2014-5-27 12:51 static/image/common/back.gif
按你的意思就是去掉一个数,这个数是一位数,即A=123,B=12或13或23.。。
那么可不可以去掉一个两个位数 ...

只能去掉一个数

AepKill 发表于 2014-5-27 17:08:24

#include <iostream>

int main(void)
{
    using namespace std;
    int n,a,b,k,c;
    cin>>n;
    for (int i=0;i<10;i++)
    {
      a=k=n-i;
      c=1;
      while (k)
      {
            if (k%10==i)
            {
                k=a;
                while(k)
                {
                  b=(a/(c*10))+(a%c);
                  if (a+b==n)
                  {
                        cout<<a<<"+"<<b<<"="<<n<<endl;
                  }
                  k/=10;
                  c*=10;
                }
                break;
            }
            k/=10;
      }
    }
    return 0;
}
页: [1]
查看完整版本: 多益网络面试题