鱼C论坛

 找回密码
 立即注册
查看: 3042|回复: 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

最佳答案

查看完整内容

下面是好友 后来 的程序,实现了寻找:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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[100];
                itoa(a,array,10);
                char arraycopy[100];
                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[i] = array[i+1];
        }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 09:41:25 | 显示全部楼层
"去掉一个数得到B" 是什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-27 11:17:22 | 显示全部楼层
N是A和B之和
为什么 A=31,B=3,N=37
N为什么会=37?我世界观混乱了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-27 12:31:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

比如A=123,则B=12或13或23
想知道小甲鱼最近在做啥?请访问 -> 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?
想知道小甲鱼最近在做啥?请访问 -> 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)之间(具体的数学运算的进位知识)。

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

接下来就做运算匹配。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

只能去掉一个数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 09:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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