我正在努力解决Java中包含AND,OR和NOT运算符的逻辑表达式.
如果输入是TRUE包含的变量的任何布尔值,则程序必须输出.我已成功完成,但效率不高.
我目前的解决方案如下:
为表达式中的每个变量创建一个真值表,并逐行评估.
(p ? ¬q) ? (r ? s) ? (¬p ? u)
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我将用一个变量真值表来评估整个表达式p q r s.
现在,我正在考虑实现一个类似的替代解决方案:考虑上面的例子.
我们可以注意到,即使只是解决了这个p ? ¬q部分,所有的表达都会出现TRUE.这为我们节省了3个额外变量的麻烦.
现在,我的问题是这个.如何在JAVA中编程?我怎么才能知道输入是否有像上面那样的模式?或者它只是一个表达式,我必须评估整个真值表?就像下面那个
(p ? ¬q) ? (r ? (s ? (¬p ? u)))
Run Code Online (Sandbox Code Playgroud) java performance truthtable logical-operators coding-efficiency
这段代码有效,但在这里阅读帖子我得到的印象可能不是一个非常"Pythonic"的解决方案.有没有更好的方法来解决这个特定的问题:
这段代码的作用是:它计算在另一个中找到的一个字符串的实例并返回计数.如果用户尝试传入空字符串,则会引发错误.
我提出的代码版本,但想知道是否有更好的更有效的"Pythonic"方式来做到这一点:
def count_string(raw_string, string_to_count):
if len(string_to_count) == 0:
raise ValueError("The length of string_to_count should not be 0!")
else:
str_count = 0
string_to_count = string_to_count.lower()
raw_string = raw_string.lower()
if string_to_count not in raw_string:
# this causes early exit if string not found at all
return str_count
else:
while raw_string.find(string_to_count) != -1:
indx = raw_string.find(string_to_count)
str_count += 1
raw_string = raw_string[(indx+1): ]
return str_count
Run Code Online (Sandbox Code Playgroud)
此代码是用Python 2.7编写的,但应该在3.x中运行.
我遇到了一个据称非常高效和优雅的 CRC 实现,我试图真正理解所有步骤。我了解迭代每一位的 CRC-CCITT 0x1021 实现,但我正在努力获得这个。这是代码。
/*
* Original Code by Ashley Roll
*/
uint16_t crc16(uint8_t* data, uint16_t length){
uint8_t x;
uint16_t crc = 0xFFFF;
while (length--){
x = crc >> 8 ^ *data++;
x ^= x>>4;
crc = (crc << 8) ^ ((uint16_t)(x << 12)) ^ ((uint16_t)(x <<5)) ^ ((uint16_t)x);
}
return crc;
}
Run Code Online (Sandbox Code Playgroud)
谁能更深入地向我解释一下 x 变量发生了什么?这就是我迄今为止能够掌握的
x = crc >> 8 ^ *data++; // Here, we take the high byte of the register
// and we XOR it …Run Code Online (Sandbox Code Playgroud) 我有这个if else代码,我想知道是否有更多有用/智能的方式来编写它:
public void saveContent() throws Exception {
if(book.isColored()) {
book.setChoosen(“1234”);
} else if (book.isAvailable()) {
book.setChosen(“23498”);
} else if (book.isAdults()) {
book.setChosen(“0562”);
} else {
ReaderResponse response = reader.getReaderResponse();
if (response != null) {
book.setChosen(response.getName());
}
} else {
book.setChosen(“4587”);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该方法返回void.
问:有些人喜欢用单词"LOL"垃圾邮件互联网聊天室.这通常会使一些其他用户感到恼火,他们将通过宣布"再多一次LOL和我出局"作出回应.还有其他用户会通过发布"再多一个LOL而我已经出局'并且我已经出局"来模仿这个回应,等等,嵌套越来越多的层次"再多一个{X}我就出局了".完成递归lol()函数,该函数采用表示嵌套级别的正(非零)整数参数
("另外一个LOL,我出去了"代表一个级别的嵌套).该函数返回一个字符串,其中包含上面字符串的适当嵌套版本.例如,lol(3)会返回字符串(再多一个LOL,我出去了,我出去了,我出去了).
我的解决方案
def lol(y):
middle = "LOL"
part1 = " One more "
part2 = " and I'm out"
templist = []
answer = ""
if y == 0:
print ("LOL")
else:
for i in range(y):
middle = middle + part2
for j in range(len(middle)):
templist.append(middle[j])
templist.reverse()
for k in range (y):
templist.append(part1)
templist.reverse()
for h in range(len(templist)):
answer = answer + templist[h]
print (answer)
Run Code Online (Sandbox Code Playgroud)
我想看一个使用递归的解决方案.然后我很想看到最有效的解决方案.谢谢!
java ×2
python ×2
c ×1
crc ×1
crc16 ×1
if-statement ×1
performance ×1
recursion ×1
truthtable ×1