我最近偶然发现了2048游戏.您可以通过在四个方向中的任意一个方向上移动它们来合并类似的图块,以制作"更大" 每次移动后,新的图块会出现在随机空位置,其值为2或4.当所有框都被填充并且没有可以合并图块的移动时,或者您创建值为的图块时,游戏会终止2048.
一,我需要遵循明确的战略来实现目标.所以,我想为它编写一个程序.
我目前的算法:
while (!game_over) {
for each possible move:
count_no_of_merges_for_2-tiles and 4-tiles
choose the move with a large number of merges
}
Run Code Online (Sandbox Code Playgroud)
我做的是在任何时候,我会尝试合并与价值观的瓷砖2和4,就是我努力2和4瓷砖,尽可能最小.如果我这样尝试,所有其他瓷砖自动合并,策略似乎很好.
但是,当我实际使用这个算法时,我只能在游戏结束前获得大约4000点.AFAIK的最高分数略高于20,000分,远高于我目前的分数.有比上面更好的算法吗?
我一直在编写以下重现关系的程序:
An = 5An-1 - 2An-2 - An-3 + An-4
Run Code Online (Sandbox Code Playgroud)
输出应该是答案模数10 ^ 9 + 7 ..我为此写了一个蛮力方法如下......
long long int t1=5, t2=9, t3=11, t4=13, sum;
while(i--)
{
sum=((5*t4) - 2*t3 - t2 +t1)%MOD;
t1=t2;
t2=t3;
t3=t4;
t4=sum;
}
printf("%lld\n", sum);
Run Code Online (Sandbox Code Playgroud)
其中MOD= 10^9 +7
每件事似乎都是真的..但我得到了一些价值的否定答案..由于这个问题,我无法找到正确的解决方案...... Plz帮助保持正确的地方Modulus
我有以下代码发送udp在子网中广播的数据包.
from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
s.sendto('this is testing',('255.255.255.255',12345))
Run Code Online (Sandbox Code Playgroud)
以下代码用于接收广播包.
from socket import *
s=socket(AF_INET, SOCK_DGRAM)
s.bind(('172.30.102.141',12345))
m=s.recvfrom(1024)
print m[0]
Run Code Online (Sandbox Code Playgroud)
问题是它没有收到任何广播包.但是,它成功接收发送到该端口的普通udp数据包.
我的机器显然收到了我测试过的广播包netcat.
$ netcat -lu -p 12345
this is testing^C
Run Code Online (Sandbox Code Playgroud)
那么问题究竟在哪里呢?
我们的数据存储区中的记录具有有效和到期时间.此信息使用字符串表示形式存储Instant.
有些记录永远不会过期.但由于到期日的值是强制性的,我们决定存储字符串表示Instant.MAX.
到现在为止还挺好.我们有搜索用例来返回在输入时间范围内有效的所有记录[s,e].我们查询数据存储区并返回[Si, Ei]满足条件的所有此类记录Si < s && e < Ei请注意,此处将比较字符串表示形式.
现在的问题是,+它被预先添加到字符串表示中Instant.MAX.这是失败的条件e < Ei,因为ASCII('+') < ASCII(digit).
我已经写了一段代码知道之后second,+开始得到前提:
Long e = Instant.now().getEpochSecond()*1000;
for (int i = 0; i < 5; i++) {
System.out.println(e + "->" + Instant.ofEpochMilli(e));
e *= 10;
}
Run Code Online (Sandbox Code Playgroud)
打印:
1471925168000->2016-08-23T04:06:08Z
14719251680000->2436-06-07T17:01:20Z
147192516800000->6634-05-07T02:13:20Z
1471925168000000->+48613-06-14T22:13:20Z
14719251680000000->+468404-07-08T06:13:20Z
Run Code Online (Sandbox Code Playgroud)
我可以选择截断+之前持久化的数据存储区.我更感兴趣的是为什么会这样,我们怎么能明确地避免它呢?
我是这个操作系统的新手。由于内核控制着所有其他程序的执行以及它们所需要的资源,我认为它也应该由CPU来执行。如果是这样,它在哪里执行?如果我认为 CPU 应该执行什么是由内核控制的,那么如果 CPU 正在执行内核本身,那么内核如何控制 CPU !!!..
这对我来说似乎是一个悖论......请解释......顺便说一下我根本没有得到这些CPU模式......如果内核控制所有进程......那么为什么这些CPU模式?如果它们在那里,那么它们是由软件(OS)还是硬件本身实现的?
谢...
我的代码适用于所有浏览器,除了IE.我设置了选择,但无法删除默认箭头IE.简单的代码:HTML
<form>
<label for="selectitem">Food Favorites</label>
<select id="selectitem">
<option>Choose...</option>
<option value="italian">Italian</option>
<option value="japanese">Japanese</option>
<option value="mexican">Mexican</option>
<option value="vietnamese">Vietnamese</option>
</select>
</form>
Run Code Online (Sandbox Code Playgroud)
CSS代码:
form {
position: relative;
top: 50px;
}
form * {
-webkit-appearance: none;
-moz-appearance: none;
background: transparent;
behavior: url(PIE.htc);
}
select, option {
border: none;
background: none;
-webkit-border-radius: 0;
-moz-border-radius: 0;
border-radius: 0;
padding: 0;
margin: 0;
}
body {
background: #666;
}
form {
position: relative;
width: 340px;
margin: 0 auto;
font-weight: bold;
color: #DDD;
}
select …Run Code Online (Sandbox Code Playgroud) 我们给出n二进制数,每个k位.我们需要找到一个k二进制数,i只有当第ith位设置在n给定的二进制数中时才设置该位.例如,
0010
0011
0100
1110
Run Code Online (Sandbox Code Playgroud)
应该给出1001答案.你只需要使用逐位操作来实现这一点.这是我的解决方案:
unsigned int array[n];//we have our 'n' numbers here
unsigned int answer=0,rxor=0,t1,t2;
for(int i=0; i<n; ++i)
{
t1 = answer;
answer ^= array[i];
t2 = (~t1) & answer;
answer &= ~(t2 & rxor);
rxor |= array[i];
}
Run Code Online (Sandbox Code Playgroud)
最终答案将存储在answer变量中.它使用了一个总的7逐位操作(1 xor,1 or,2 negation,3 and每次迭代),合计的7*n操作.我的问题是,可以进一步减少操作次数.
我正在尝试为C中的问题编写代码.代码如下:
#include<stdio.h>
int cop(int a,int b)
{
int c,d,e,f,g;
if(a>b)
{
c=a;
a=b;
b=c;
}
while(c!=0)
{
c=b%a;
b=a;
a=c;
}
return b;
}
int main()
{
int i=1, j=1, k, a, b, c, d, e, f, g=1;
scanf("%d",&k);
int q=0;
for(q=k;q>0;q--)
{
scanf("%d",&a);
while(g==1)
{
b=j+i;
i=j;
j=b;
g=cop(j,a);
printf("%d\n",g);
}
printf("%d %d\n",g,j);
j=1;i=1;g=1;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我3 3 5 161打印输入时
1
3
3 3
1
1
5
5 5
1
1
1
1
1
7 …Run Code Online (Sandbox Code Playgroud) 我知道为什么这是C++中的错误.
class A
{
A b;
};
int main() {}
Run Code Online (Sandbox Code Playgroud)
因为type of b is unresolved at the compile time.那么为什么下面的代码是正确的?
class A
{
static A b;
}
int main() {}
Run Code Online (Sandbox Code Playgroud)
如果它是静态的,变量b的类型是否已被解析?
最后,令我惊讶的是以下代码适用于JAVA:
public class Main
{
Main g;
public static void main(String[] args)
{
System.out.println("hi");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我知道它们特定于类而不是实例的静态变量.但这并没有给出上述问题的答案......请给我一些启示.