Tag: 算法

如何创建一个圆柱形骨骼存储为2点(头部,尾部)的矢量?

这就是我想要的,有人在网上写过,但我以前从未使用过四元数,所以不知道如何实现它。 我相信这只是一个简单的等式,但如何在c / c ++代码中实现? Here: “You could use a bone stored as a vector made of 2 points (Head,Tail). Since you are rotating it, Head will be the fulcrum and Tail will rotate around an arbitrary axis. That’s a quaternion’s job.” 我有一个圆柱形网格的所有顶点的绝对位置,现在如果我在顶端和底端创建两个矢量/点V1(x,y,z)和V2(x,y,z),那么我将能够变换网格顶点只需转换V2(顶端)点,但V1(底端)不应改变其位置。 我可以在带有glutSolidCylinder的OpenGL中做,它非常简单,但是我想用网格顶点实现,所以每个顶点都应该在顶部或底部矢量/点的任何变化后更新。 谢谢。

餐饮哲学家饥饿的可能性

如果它保证满足以下所有条件,我需要检查我解决餐饮哲学家问题的算法: 没有僵局的可能性。 没有饥饿的可能性。 我在筷子上使用信号量来解决问题。 这是我的代码(算法): while(true) { // He is Hungry pickup_chopsticks(i); // He is Eating… drop_chopsticks(i); // He is thinking } // … void pickup_chopsticks(int i) { if(i % 2 == 0) /* Even number: Left, then right */ { semaphore_wait(chopstick[(i+1) % NUM_PHILOSOPHERS]); semaphore_wait(chopstick[i]); } else /* Odd number: Right, then left */ { […]

将az扩展为abc … xyzforms的方法

嗨:)我想要做的是写一个简单的程序,从最短的条目扩展 例如 az或0-9或abc或a-z0-9 写得最久 例如 abc … xyz或0123456789或abc或abcdefghijklmnouprstwxyz0123456789 1-st考试最短录入= 1-example示例结果应该给:) 到目前为止,我写了这样的东西,它只适用于从a到z的字母: expand(char s[]) { int i,n,c; n=c=0; int len = strlen(s); for(i = 1;s[i] > ‘0’ && s[i]= ‘a’ && s[i] <= 'z' || s[i]=='-';i++) { /*c = s[i-1]; g = s[i]; n = s[i+1];*/ if( s[0] == '-') printf("%c",s[0]); else if(s[i] == '-') { […]

找出2d矩阵是否是另一个2d矩阵的子集

最近我参加了一个黑客马拉松,我开始了解一个试图在2d矩阵中找到网格forms的问题。一个模式可能是U,H和T,并将用3 * 3矩阵表示如果我想呈现H和U. +–+–+–+ +–+–+–+ |1 |0 |1 | |1 |0 |1 | +–+–+–+ +–+–+–+ |1 |1 |1 | –> H |1 |0 |1 | -> U +–+–+–+ +–+–+–+ |1 |0 |1 | |1 |1 |1 | +–+–+–+ +–+–+–+ 现在我需要将其搜索到10*10 matrix containing 0s and 1s最近也是唯一的解决方案我可以得到它的powershell算法O(n ^ 4)。在MATLAB和R等语言中有非常微妙的方法可以做到这一点但是不是在C,C ++中。 我尝试了很多在Google和SO上搜索这个解决方案。但我最接近的是这个SO POST ,它讨论了实现Rabin-Karp字符串搜索算法 。但是没有伪代码或任何post解释这个。可以任何人帮忙或者提供任何链接,pdf或一些逻辑来简化这个? 编辑 作为Eugene Sh。 […]

骑士的巡回算法

所以我必须编写这个算法(这个版本不需要在骑士开始的同一个地方结束),我让它工作,但它太慢了。 对于size = 8,它适用于起始位置x = 0和y = 0,但是如果我尝试将x和y操纵为例如2和4,则它在几分钟后不会结束。 有人可以帮忙吗? #include #define size 8 int ruch_x[]={ -1, 1, -2, 2, -2, 2, -1, 1}; //arrays of possible knight moves, for example 2nd move is [1,2]// int ruch_y[]={ 2, 2, 1, 1, -1, -1, -2, -2}; int done(int szach[][size]) { for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { if(szach[i][j]==0) […]

在链表上实现mergesort

我的任务是在用C / C ++编写的列表上实现合并排序算法。 我有一般的想法,编写我的代码并成功编译它。 但是,当我运行它时,它会开始正常,但然后挂起“准备好的列表,现在开始排序”而不会出现任何错误。 我试图查看我的代码,但我完全不知道问题是什么。 我也非常业余的调试,所以使用gdb尽我最大的能力导致我没有在哪里。 任何建议或提示都将是一个巨大的帮助,谢谢大家! #include #include struct listnode { struct listnode *next; int key; }; //Finds length of listnode int findLength (struct listnode *a) { struct listnode *temp = a; int i = 0; while (temp != NULL) { i++; temp = temp->next; } return i; } struct listnode * […]

在C中获取两个数组的差异的有效方法是什么?

样本输入 Array_1 [] = { 10, 20, 30, 40, 50 }; Array_2 [] = { 30, 40, 50, 60, 70 }; 样本输出 Array_1_Extras [] = { 10, 20 }; Array_2_Extras [] = { 60, 70 }; 描述 输入数组未排序。 输入数组长度 – 10K。 输入数组值范围为0 – 4095。 不应修改输入数组顺序和值。 输出数组可以按任何顺序排列。 输出数组中不需要重复项。 我需要一些时间有效的逻辑来实现这个程序。 提前致谢。

在非常长的字符串中查找频率的最佳方法

我必须找到一种非常优化的方法来查找包含单词的非常长的文件中的字符频率(使用C / C ++时,忽略大小写,应该计算小写和大写)。 我已经知道一个是这个(这里我正在读取终端用户的输入,但在我的情况下我将从文件中读取,所以请不要去get()函数,请关注我的主要目标是获得一个比这更优化的方式(如果可能的话)): int main() { char string[100]; int c = 0, count[26] = {0}; printf(“Enter a string\n”); gets(string); while (string[c] != ‘\0’) { /** Considering characters from ‘a’ to ‘z’ only and ignoring others */ if (string[c] >= ‘a’ && string[c] <= 'z') count[string[c]-'a']++; c++; } for (c = 0; c < […]

帮助:图形竞赛问题:可能是修改后的Dijkstra或其他替代算法

我正在尝试做关于图表的比赛练习: XPTO是一个勇敢的冒险家(对他自己的好处来说有点过于苛刻),无论多么荒凉,他都吹嘘探索宇宙的每个角落。 事实上,他并没有访问人们可以轻松居住的行星,他更喜欢那些只有一个疯子才会有充分理由去的地方(例如数百万的学分)。 他的最新攻击是试图在Proxima III中生存。 问题在于Proxima III遭受高腐蚀性酸的风暴,这些酸会破坏一切,包括专门设计用于抵抗腐蚀的太空服。 我们勇敢的探险家被困在这些风暴之中的一个长方形区域。 幸运的是,他有一种仪器能够测量每个扇区上酸的精确浓度以及它对太空服的损害程度。 现在,他只需要知道他是否能逃脱风暴。 问题 问题在于找到一条允许XPTO逃离有害风暴的逃生路线。 你将获得太空服的初始能量,矩形区域的大小以及太空服在站在每个区域时所遭受的伤害。 你的任务是找到出口部门,达到它所需的步数以及他的衣服离开矩形区域时的能量。 选择的逃生路线应该是最安全的(即,他的宇航服将受损最少)。 请注意,如果他的西装的能量达到零,XPTO将会消亡。 如果有多个可能的解决方案,请选择使用最少步骤的解决方案。 如果至少有两个具有相同步数(X1,Y1)和(X2,Y2)的扇区,则选择第一个,如果X1 <X2,或者X1 = X2和Y1 <Y2。 约束0 <E≤30000套装的起始能量 0≤W≤500矩形的宽度 0≤H≤500矩形的高度 0 <X <W起始X位置 0 <Y <H起始Y位置 0≤D≤10000每个部门受到的损害 输入 给出的第一个数字是测试用例的数量。 每个案例将由一个整数为E,X和Y的行组成。以下行将包含整数W和H.以下行将保存包含太空服在相应扇区中将遭受的损害D的矩阵。 请注意,与计算机爱好者的情况一样,(1,1)对应于左上角。 产量 如果有解决方案,输出将是剩余能量,出口扇区的X和Y坐标以及将导致Rodericus安全的路线的步数。 如果没有解决方案,这句话再见残酷的世界! 将写。 样本输入 3 40 3 3 7 8 12 11 12 11 3 12 12 […]

如何调整此算法以处理要修改的关键字的多次出现?

我想搜索所有出现的字符串(第一个参数),并在所有第一个字符串出现之前添加另一个字符串(第二个参数)。 理想情况下,我希望每一次出现的dime都用limedime代替。 然而,我设法做到了这一点,因为只有第一次出现这个词。 未检测到任何不匹配的匹配字符串,并且不执行任何操作。 此外,包含dime多行根据在前一行上进行的修改进行修改,这不是我想要的。 这是我得到的一些示例输出: something dime something dime something something 会变成 something limedime something dime something something 如果我有这个 dime notimportant! dime dime 我会得到 limedime notimportant! limelimedime limelimelimedime 编辑:我已修改代码,以便您可以使用stdin轻松测试它,并且还包括replace_str() : #include #include #include char *replace_str(char *str, char *orig, char *rep) { static char buffer[4096]; char *p; if(!(p = strstr(str, orig))) return str; strncpy(buffer, str, […]