鱼C论坛

 找回密码
 立即注册
查看: 3665|回复: 9

多益网络面试题

[复制链接]
发表于 2014-5-27 01:33:41 | 显示全部楼层 |阅读模式
30鱼币
本帖最后由 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

最佳答案

查看完整内容

下面是好友 后来 的程序,实现了寻找:
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 01:33:42 | 显示全部楼层
下面是好友 后来 的程序,实现了寻找:

  1. #include "stdafx.h"
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <math.h>
  5. int main(int argc, char* argv[])
  6. {        
  7.         void deletebit(char array[],int i);
  8.         int n;
  9.         printf("please input the value of n:");
  10.         scanf("%d",&n);
  11.         for(int a = 10; a < n ;a++)
  12.         {
  13.                 int b = a;
  14.                 char array[100];
  15.                 itoa(a,array,10);
  16.                 char arraycopy[100];
  17.                 strcpy(arraycopy,array);
  18.                 int LEN = strlen(array);
  19.                 for(int i = 0; i < LEN; i++)
  20.                 {                        
  21.                         deletebit(array,i);
  22.                         int b = atoi(array);
  23.                         if(a + b == n)
  24.                         {
  25.                                 printf("%d + %d = %d\t",a,b,n);
  26.                                 break;
  27.                         }
  28.                         else
  29.                                 strcpy(array,arraycopy);
  30.                 }
  31.                 a = b;
  32.         }
  33.         system("pause");
  34.         return 0;
  35. }

  36. void deletebit(char array[],int i)
  37. {
  38.         for(; i < strlen(array); i++)
  39.         {
  40.                 array[i] = array[i+1];
  41.         }
  42. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 09:41:25 | 显示全部楼层
"去掉一个数得到B" 是什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 11:17:22 | 显示全部楼层
N是A和B之和
为什么 A=31,B=3,N=37
N为什么会=37?我世界观混乱了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-27 12:31:29 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-27 12:32:46 | 显示全部楼层
sidfate 发表于 2014-5-27 09:41
"去掉一个数得到B" 是什么意思

比如A=123,则B=12或13或23
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 12:51:02 | 显示全部楼层
Simanzen 发表于 2014-5-27 12:32
比如A=123,则B=12或13或23

按你的意思就是去掉一个数,这个数是一位数,即A=123,B=12或13或23.。。
那么可不可以去掉一个两个位数 即A=123 ,B=1或者3,再则,去掉的数必须是连续的不如12或23,可不可以是13,即A=123,B=2?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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)之间(具体的数学运算的进位知识)。

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

接下来就做运算匹配。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-27 13:24:44 | 显示全部楼层
elvo 发表于 2014-5-27 12:51
按你的意思就是去掉一个数,这个数是一位数,即A=123,B=12或13或23.。。
那么可不可以去掉一个两个位数 ...

只能去掉一个数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 17:08:24 | 显示全部楼层
  1. #include <iostream>

  2. int main(void)
  3. {
  4.     using namespace std;
  5.     int n,a,b,k,c;
  6.     cin>>n;
  7.     for (int i=0;i<10;i++)
  8.     {
  9.         a=k=n-i;
  10.         c=1;
  11.         while (k)
  12.         {
  13.             if (k%10==i)
  14.             {
  15.                 k=a;
  16.                 while(k)
  17.                 {
  18.                     b=(a/(c*10))+(a%c);
  19.                     if (a+b==n)
  20.                     {
  21.                         cout<<a<<"+"<<b<<"="<<n<<endl;
  22.                     }
  23.                     k/=10;
  24.                     c*=10;
  25.                 }
  26.                 break;
  27.             }
  28.             k/=10;
  29.         }
  30.     }
  31.     return 0;
  32. }
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-10 02:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表