我发现这个代码使用强力机制来解决背包问题(这主要是为了学习,所以不需要指出动态更有效).我得到了代码工作,并了解其中的大部分内容.最.这是问题:
我注意到这两个条件,我不知道它们是如何工作的以及为什么它们在代码中 - 我知道它们是至关重要的,因为我所做的任何改变都会导致算法产生错误的结果:
// if bit not included then skip
if (((i >> j) & 1) != 1) continue;
// if bit match then add
if (((bestPosition >> j) & 1) == 1)
{
include.Add(Items[j]);
}
Run Code Online (Sandbox Code Playgroud)
这是整个班级,以及我从主要方式调用它的方式:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace KnapSack2
{
class BruteForce
{
public double Capacity { get; set; }
public Item[] Items { get; set; }
public Data Run()
{
int bestValue = 0;
int bestPosition = 0;
int size …Run Code Online (Sandbox Code Playgroud) 通俗地说,我的目标是改变数字键盘上“点”按钮的行为方式。现在一旦点击它就会产生一个“逗号”。我需要它来产生一个“点”。
经过研究,我开始使用语言环境。显然我的区域设置设置为 en_US:
[xxx@xxx ~]$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
Run Code Online (Sandbox Code Playgroud)
我研究了我认为适合此特定区域设置的正确配置文件: /usr/share/i18n/locales/en_US
并寻找任何可能与“点”、“小数分隔符”等相关的内容。找到了 LC_MONETARY 和 LC_NUMERIC,但是货币的 mon_decimal_point 和数字的decimal_point 已经设置为 - 我很确定这是一个“点”。
只是为了咯咯笑,我还将 mon_thousands_sep 和数千_sep 更改为并重新启动。这里没有帮助。我的机器:RHEL xxxx@xxxxx ~]$ uname -a Linux xxxxxx 2.6.32-642.4.2.el6.x86_64 #1 SMP Mon Aug 15 02:06:41 EDT 2016 x86_64 x86_64 x86_64 GNU/Linux
现在 - 这是一台公司计算机,有一些严格的安全策略,所以我不可能只是
yum -install some_magic_keyboard_mapping_app
Run Code Online (Sandbox Code Playgroud)
我需要将其更改为旧样式。我设置了一个虚拟机,因此在更改工作笔记本电脑上的内容之前,我可以随心所欲地把它弄乱。