多益网络面试题
本帖最后由 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 下面是好友 后来 的程序,实现了寻找:
#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;
}
}
"去掉一个数得到B" 是什么意思 N是A和B之和
为什么 A=31,B=3,N=37
N为什么会=37?我世界观混乱了 765643729 发表于 2014-5-27 11:17 static/image/common/back.gif
N是A和B之和
为什么 A=31,B=3,N=37
N为什么会=37?我世界观混乱了
是34,写错了 sidfate 发表于 2014-5-27 09:41 static/image/common/back.gif
"去掉一个数得到B" 是什么意思
比如A=123,则B=12或13或23 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?
其实这个问题在于简化运算:
例如给定一个数 N ,加入 N 的位数为 W,假设输出为 S 。
如果 N 的最高位为 1 时(N 为 1XX... ,S-1 个 X),则输出的 S 的范围在 9XX...(S-2 个X)到
300...(S-1 个0)之间(具体的数学运算的进位知识)。
一次类推你就找到了缩小的搜索输出的数的范围。
接下来就做运算匹配。 elvo 发表于 2014-5-27 12:51 static/image/common/back.gif
按你的意思就是去掉一个数,这个数是一位数,即A=123,B=12或13或23.。。
那么可不可以去掉一个两个位数 ...
只能去掉一个数 #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]