小编Luk*_*ins的帖子

动态编程 - C中的最小硬币数

我已经浏览了网站上的各种问题,我没有设法通过以下推理找到任何实现这一点的东西(所以我希望这不是重复).

我试图通过C程序解决的问题如下:

作为自动售货机控制器的程序员,您需要计算构成所需更改的最小硬币数量,以便回馈给客户.这个问题的有效解决方案采用动态编程方法,首先计算1美分变化所需的硬币数量,然后计算2美分,然后计算3美分,直到达到所需的变化,每次使用先前的计算硬币数量.编写一个包含该功能的程序,该程序ComputeChange()获取有效硬币列表和所需的更改.该程序应反复询问控制台所需的更改并进行相应的调用ComputeChange().它还应该使用"缓存",其中保留任何先前计算的中间值以用于后续查找.

在网上四处寻找其他人如何解决它后,我发现下面的例子应用了便士,镍币和硬币:

在此输入图像描述

我尝试以我的代码为基础.但首先,我的代码没有停止,其次,我不确定我是否合并了上面的标题中提到的缓存元素.(我不确定我需要去做那个部分).

任何人都可以帮我找到代码中的缺陷吗?

#include <stdio.h>
#include <limits.h>

int computeChange(int[],int,int);
int min(int[],int);

int main(){
    int cur[]={1,2,5,10,20,50,100,200};
    int n = sizeof(cur)/sizeof(int);
    int v;

    printf("Enter a value in euro cents: ");
    scanf("%d", &v);

    printf("The minimum number of euro coins required is %d", computeChange(cur, v, n));

    return 0;
}

int computeChange(int cur[], int v, int n){
    if(v < 0)
        return -1;
    else if(v == 0)
        return 0;
    else{
        int possible_mins[n], i;
        for(i = 0; i …
Run Code Online (Sandbox Code Playgroud)

c dynamic-programming

14
推荐指数
1
解决办法
1516
查看次数

如何判断括号是否必要?

我在Haskell中编写了一个解析器,它以字符串输入的形式解析公式,并生成data由下面的BNF定义的Haskell 类型.

formula ::=  true  
         |  false  
         |  var  
         |  formula & formula  
         |  ? var . formula
         |  (formula)

    var ::=  letter { letter | digit }*
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个实例,Show以便我可以很好地打印我的类型定义的公式(我不想使用deriving (Show)).我的问题是:如何定义我的功能,以便它可以告诉括号何时是必要的?我不想要太多,也不要太少括号.

例如,给定公式? X . (X & Y) & (? Y . Y) & false,在解析时,生成数据结构

And (And (Forall "X" (And (Var "X") (Var "Y"))) (Forall "Y" (Var "Y"))) False
Run Code Online (Sandbox Code Playgroud)

我们有

   Too little parentheses:    ? X . X & Y & ? Y . Y …
Run Code Online (Sandbox Code Playgroud)

parsing haskell pretty-print

7
推荐指数
1
解决办法
115
查看次数

计算 ALU 中的溢出标志

首先,如果这不是发布此问题的正确位置,请原谅我,但我不确定它应该去哪里。我目前正在用 VHDL 模拟 Xilinx 中的 ALU。ALU 具有以下输入和输出:

输入

  • AB:两个 8 位操作数
  • Ci : 单位进位
  • Op : 多路复用器的 4 位操作码

输出

  • Y : 8 位输出操作数
  • Co : 单比特执行
  • V : 溢出标志(如果有溢出则为 1,否则为 0)
  • Z : 零标志(如果为零则为 1,否则为 0)
  • S:符号标志(如果 -ve 则为 1,如果 +ve 则为 0)

ALU 执行下表中详述的操作:

表在这里

我已经使用多路复用器和加法器实现了它,如下图所示:

这里

我的问题是:

如何计算溢出标志的值V

我知道:

  • 正负相加不会发生溢出
  • 如果没有进位/借位,则可以通过评估表达式来计算溢出
(not A(7) and not B(7) and Y(7)) or (A(7) and B(7) and not Y(7))
Run Code Online (Sandbox Code Playgroud)

其中A(7)B(7)Y(7)分别是A …

cpu logic vhdl

5
推荐指数
1
解决办法
1万
查看次数

Python 中的统一成本搜索

我在 Python 中实现了一个简单的图形数据结构,其结构如下。代码在这里只是为了阐明函数/变量的含义,但它们是不言自明的,因此您可以跳过阅读。

# Node data structure
class Node: 

    def __init__(self, label):        
        self.out_edges = []
        self.label = label
        self.is_goal = False


    def add_edge(self, node, weight = 0):          
        self.out_edges.append(Edge(node, weight))


# Edge data structure
class Edge:

    def __init__(self, node, weight = 0):          
        self.node = node
        self.weight = weight

    def to(self):                                  
        return self.node


# Graph data structure, utilises classes Node and Edge
class Graph:    

    def __init__(self):                             
        self.nodes = []

    # some other functions here populate the graph, and randomly select three goal …
Run Code Online (Sandbox Code Playgroud)

python algorithm search graph

5
推荐指数
1
解决办法
3万
查看次数

使用 ncurses 打印宽 unicode 字符

我正在尝试使用ncurses.hUbuntu 上的 C 库在屏幕上放置一个星形 unicode 字符。我试图运行的代码如下:

#include <stdio.h>
#include <wchar.h>
#include <curses.h>
#include <ncurses.h>
#include <stdlib.h>
#include <wctype.h>
#include <locale.h>

int main() {
    setlocale(LC_CTYPE, "");

    initscr();
    cbreak();

    WINDOW *win = newwin(0, 0, 0, 0);
    refresh();
    wrefresh(win);

    const wchar_t* star = L"0x2605";
    mvaddwstr(3, 3, star);

    getch();
    endwin();
}
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误

implicit declaration of function ‘mvaddwstr’ [-Wimplicit-function-declaration]
Run Code Online (Sandbox Code Playgroud)

尽管此功能与类似的功能一起在这里得到了很好的记录,但我也无法开始工作。是否有一些我不包括在内的图书馆来完成这项工作?或者有没有其他方法来显示这个角色?我很感激任何帮助。

c unicode ncurses

5
推荐指数
1
解决办法
2906
查看次数

下载Github页面的按钮

为现有存储库的github页面选择主题时,您可以看到这组按钮(例如,在Minimal主题中): 在此输入图像描述

但是,当我访问我的github页面网站时,按钮不存在; 所有我能看到的是我readme.md的存储库,以及在GitHub链接上查看项目.有没有办法在我的页面上获取这些按钮?

git github jekyll github-pages

5
推荐指数
1
解决办法
2314
查看次数

在C中打印Unicode符号

我正在尝试使用C在linux终端中打印一个unicode星形字符(0x2605).我已经按照网站上其他答案建议的语法,但我没有得到输出:

#include <stdio.h>
#include <wchar.h>

int main(){

    wchar_t star = 0x2605;
    wprintf(L"%c\n", star);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我很感激任何建议,特别是我如何使用ncurses图书馆.

c unicode ncurses

4
推荐指数
1
解决办法
6997
查看次数

为什么zipWith.zip可以工作?

我正在实现一个combine :: [[a]] -> [[b]] -> (a -> b -> c) -> [[c]]给出两个2D列表的函数,将给定的函数应用于2D列表f :: a -> b -> c的条目.换一种说法:

          [[a, b, c],    [[r, s, t],          [[f a r, f b s, f c t], 
combine    [d, e, g],     [u, v, w],   f   =   [f d u, f e v, f g w],
           [h, i, j]]     [x, y, z]]           [f h x, f i y, f j z]]
Run Code Online (Sandbox Code Playgroud)

现在我怀疑combine = zipWith . zipWith,因为我已经尝试过,它给了我预期的结果,例如

(zipWith . …
Run Code Online (Sandbox Code Playgroud)

haskell zipwith

3
推荐指数
1
解决办法
385
查看次数

矢量和指针

向量和指向其元素的指针的主要问题是,无论何时push_back调用它们,它们都可以在内存中重新分配,从而使指针无效.

我正在尝试实现后缀trie,其中我将数据结构存储node在节点向量中.我知道对于大小为n的字符串,数字n(n + 1)/ 2是trie中节点数的上限.

代码也是如此

std::string T = "Hello StackOverflow!";
std::vector<Node> nodes;

int n = T.length();
nodes.reserve(n*(n+1)/2);
Run Code Online (Sandbox Code Playgroud)

保证我创建的任何指针nodes都不会被无效?即这会保证向量不被重新分配吗?


编辑:我已经实现了这一点,并在运行时不断收到以下错误.

terminate called after throwing an instance of 'std::out_of_range'
what():  basic_string::at: __n (which is 0) >= this->size() (which is 0)
Aborted (core dumped)
Run Code Online (Sandbox Code Playgroud)

可能导致这种情况的任何想法?

c++ pointers vector

2
推荐指数
1
解决办法
139
查看次数

在Haskell中压缩2D列表

我想使用zip在Haskell中组合两个二维列表,即实现这样的事情

[[1,2,3],           [[10, 11, 12],         [[(1, 10), (2, 11), (3, 12)],
 [4,5,6],   `zip'`   [13, 14, 15],   ->     [(4, 13), (5, 14), (6, 15)],
 [7,8,9]]            [16, 17, 18]]          [(7, 16), (8, 17), (9, 18)]]
Run Code Online (Sandbox Code Playgroud)

不使用Prelude之外的任何功能.有没有办法可以这样做,map或许使用?问题是一个人不能map zip超过两个列表.

haskell list

2
推荐指数
1
解决办法
143
查看次数

在编写递归算法时使用'static'是否作弊?

作为编程赋值的一部分,我需要编写一个递归函数来确定数组中的最大整数.引用确切的任务:

编写一个递归函数,找到给定整数列表中的最大数字.

我提出了两个解决方案,第一个解决方案是两个递归调用:

int largest(int arr[], int length){
    if(length == 0)
        return 0;
    else if(arr[length - 1] > largest(arr,length -1))
        return arr[length];
    else return largest(arr,length -1);
}
Run Code Online (Sandbox Code Playgroud)

第二个只使用一个,但它使用一个静态变量n:

int largest(int arr[], int length){
    static int n = -1;
    if(length == 0)
        return n;
    else if (arr[length - 1] > n)
        n = arr[length - 1];
    return largest(arr, length - 1);
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否会考虑作弊使用静态变量来完成这样的任务.无论哪种方式,哪一种被认为是更好的形式?是否有一个顶生于两者的递归方法?

c algorithm recursion

1
推荐指数
2
解决办法
169
查看次数