(领鱼币)微软的题目,1-9不能重复
群里发出来的大家都来积极参与吧,能实现就行,不管什么办法,一起学习
我也写了下(用的递归),代码回复就有了
代码:
**** Hidden Message *****
结果(我算出是2个,不知道对没)
**** Hidden Message ***** @liehuo @拈花小仙 @康小泡 @怡静 @零度C 领鱼比啦~ 就是只有这两个答案,我不会C,用python试了。 冬雪雪冬 发表于 2016-8-23 13:50
就是只有这两个答案,我不会C,用python试了。
跑多久出来 迷雾少年 发表于 2016-8-23 13:55
跑多久出来
0.146s 冬雪雪冬 发表于 2016-8-23 14:00
0.146s
很强势 迷雾少年 发表于 2016-8-23 14:04
很强势
python是解释型语言,速度比C慢很多。不过写程序倒是比C容易且快捷。 冬雪雪冬 发表于 2016-8-23 14:06
python是解释型语言,速度比C慢很多。不过写程序倒是比C容易且快捷。
{:10_285:}我这用C跑了5秒,我估计是我算法问题,用递归慢 迷雾少年 发表于 2016-8-23 14:12
我这用C跑了5秒,我估计是我算法问题,用递归慢
是的,递归是很耗时的。 看看 本帖最后由 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;
}
{:9_239:}仙仙是学碴 666 学习一下 学习一下 {:9_233:} 没看懂是干什么的啊 看了你运行的懂了 好厉害的样子·~~~~学习 学习一下