迷雾少年 发表于 2016-8-23 12:31:48

(领鱼币)微软的题目,1-9不能重复

群里发出来的




大家都来积极参与吧,能实现就行,不管什么办法,一起学习

我也写了下(用的递归),代码回复就有了

代码:
**** Hidden Message *****

结果(我算出是2个,不知道对没)
**** Hidden Message *****

迷雾少年 发表于 2016-8-23 12:47:07

@liehuo @拈花小仙 @康小泡 @怡静 @零度C 领鱼比啦~

冬雪雪冬 发表于 2016-8-23 13:50:25

就是只有这两个答案,我不会C,用python试了。

迷雾少年 发表于 2016-8-23 13:55:10

冬雪雪冬 发表于 2016-8-23 13:50
就是只有这两个答案,我不会C,用python试了。

跑多久出来

冬雪雪冬 发表于 2016-8-23 14:00:55

迷雾少年 发表于 2016-8-23 13:55
跑多久出来

0.146s

迷雾少年 发表于 2016-8-23 14:04:08

冬雪雪冬 发表于 2016-8-23 14:00
0.146s

很强势

冬雪雪冬 发表于 2016-8-23 14:06:09

迷雾少年 发表于 2016-8-23 14:04
很强势

python是解释型语言,速度比C慢很多。不过写程序倒是比C容易且快捷。

迷雾少年 发表于 2016-8-23 14:12:11

冬雪雪冬 发表于 2016-8-23 14:06
python是解释型语言,速度比C慢很多。不过写程序倒是比C容易且快捷。

{:10_285:}我这用C跑了5秒,我估计是我算法问题,用递归慢

冬雪雪冬 发表于 2016-8-23 14:15:17

迷雾少年 发表于 2016-8-23 14:12
我这用C跑了5秒,我估计是我算法问题,用递归慢

是的,递归是很耗时的。

樱花 发表于 2016-8-23 14:35:48

看看

lx_Zz 发表于 2016-8-23 17:15:54

本帖最后由 lx_Zz 于 2016-8-23 17:18 编辑

0.009s    用了点技巧优化了搜索

#include <stdio.h>
#include <string.h>
#include <windows.h>

int dp;
int stk;
int sp = 1;

void Print(int num)
{
        printf("success\n");
        printf("%d", num);
        for (int i = 8; i > 0; i -= 2)
        {
                printf(" %d", stk);
        }
        printf("\n");
        printf(" ");
        for (int i = 7; i > 0; i -= 2)
        {
                printf(" %d", stk);
        }
        printf("\n");
}

void dfs(int temp, int step, int num)
{
        if (step > 3 && (num - 3) == temp)
        {
                Print(num);
        }
        for (int i = 1; i <= 9; i++)
        {
                if (dp == 0 && dp[(i + 3 + temp) % 10] == 0 && (i + 3 + temp) % 10 != 0)
                {
                        dp = 1;
                        dp[(i + 3 + temp) % 10] = 1;
                        stk = i;
                        stk = (i + 3 + temp) % 10;
                        int flag = temp;
                        if (i + 3 + temp > 10) temp = 1;
                        else temp = 0;
                        dfs(temp, step + 1, num);
                        temp = flag;
                        dp = 0;
                        dp[(i + 3 + temp) % 10] = 0;
                        sp--;
                        sp--;
                }
        }
}

int main()
{
        //很明显第一个个数的最高位不是3就是4

        memset(dp, 0, sizeof(dp));
        int num = 3;
        dp = 1;
        dfs(0, 0, num);//先假设首位是3、从低位开始构造
        dp = 0;
        num = 4;
        dp = 1;
        dfs(0, 0, num);//假设首位是4、从低位开始构造
        dp = 0;

        //system("pause");
        return 0;
}


拈花小仙 发表于 2016-8-24 02:18:01

{:9_239:}仙仙是学碴

去瞧瞧 发表于 2016-8-24 08:24:44

666

紫瞰 发表于 2016-8-24 09:19:49

学习一下

TimTimTim 发表于 2016-8-24 11:33:40

学习一下

husuiwen 发表于 2016-8-24 21:14:41

{:9_233:}

飞飞123 发表于 2016-8-25 02:48:53

没看懂是干什么的啊

飞飞123 发表于 2016-8-25 02:49:57

看了你运行的懂了

胡闹闹 发表于 2016-8-25 14:59:26

好厉害的样子·~~~~学习

Pythonfreshman 发表于 2016-8-25 15:49:14

学习一下
页: [1] 2 3
查看完整版本: (领鱼币)微软的题目,1-9不能重复