我在一个编程网站上遇到了以下这个问题:彼得希望为他的密码系统生成一些素数.帮助他!你的任务是生成两个给定数字之间的所有素数!
输入
输入以单行中的测试用例数t开始(t <= 10).在接下来的t行中的每一行中,存在由空格分隔的两个数m和n(1 <= m <= n <= 1000000000,nm <= 100000).
我提出了以下解决方案:
import java.util.*;
public class PRIME1 {
static int numCases;
static int left, right;
static boolean[] initSieve = new boolean[32000];
static boolean[] answer;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
numCases = sc.nextInt();
initSieve[0] = true;
initSieve[1] = true;
Sieve();
for (int j = 0; j < numCases; j++) {
String line = sc.next();
String line2 = sc.next();
left = Integer.parseInt(line);
right = …Run Code Online (Sandbox Code Playgroud) 我有一个数组,其中包含不同大小的材料列表:{4,3,4,1,7,8}.但是,垃圾箱可以容纳最大尺寸为10的材料.我需要找出包装阵列中所有元素所需的最小数量的垃圾箱.
对于上述阵列中,可以在3个箱包装和将它们划分如下:{4,4,1},{3,7},{8}.还有其他可能的安排也适合三个库存管道,但它不能用更少的
我试图通过递归来解决这个问题,以便更好地理解它.
我正在使用这个 DP配方(pdf文件的第20页)
考虑输入(n1; :::; nk),其中n =Σnj项
确定可以打包到单个bin中的k元组(输入的子集)的集合
即所有元组(q1; :::; qk)其中OPT(q1; :::; qk)= 1
用Q表示这个集合对于每个k元组q,我们有OPT(q)= 1
通过使用递归计算剩余值:OPT(i1; :: :; ik)= 1 + minOPT(i1 - q1; :::; ik - qk)
我已经制作了代码,它适用于小型数据集.但是如果将我的数组的大小增加到超过6个元素,它变得非常慢 - 解决包含8个元素的数组需要大约25秒你能告诉我算法是否有问题?我不需要替代解决方案--- 只需要知道为什么这么慢,以及如何改进它
这是我用C++编写的代码:
void recCutStock(Vector<int> & requests, int numStocks)
{
if (requests.size() == 0)
{
if(numStocks <= minSize)
{
minSize = numStocks;
}
// cout<<"GOT A RESULT : "<<numStocks<<endl;
return ;
}
else
{
if(numStocks+1 < minSize) …Run Code Online (Sandbox Code Playgroud) 我试图在C++中反转一个空终止的字符串.我写了下面的代码:
//Implement a function to reverse a null terminated string
#include<iostream>
#include<cstdlib>
using namespace std;
void reverseString(char *str)
{
int length=0;
char *end = str;
while(*end != '\0')
{
length++;
end++;
}
cout<<"length : "<<length<<endl;
end--;
while(str < end)
{
char temp = *str;
*str++ = *end;
*end-- = temp;
}
}
int main(void)
{
char *str = "hello world";
reverseString(str);
cout<<"Reversed string : "<<str<<endl;
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行这个C++程序时,我在语句的while循环中得到了一个写访问冲突: *str = *end ;
虽然这很简单,但我似乎无法弄清楚我收到此错误的确切原因.
你能帮我辨认一下这个错误吗?
我正在编写Quick Hull算法,其中包括检查点是否位于三角形内.为此,我创建了以下两个函数,如果该点在内部则返回true,否则返回false.
然而,结果是安静意外的意义上的一些点被正确分类,而一些不是,我无法弄清楚问题.有人可以帮我验证我写的代码是否正确.方法是我使用向量来确定一个点是否与三角形的每个边缘的顶点位于同一侧.代码是:
public boolean ptInside(Point first, Point last, Point mx, Point cur) {
boolean b1 = pointInside(first, last, mx, cur);
boolean b2 = pointInside(last, mx, first, cur);
boolean b3 = pointInside(first, mx, last, cur);
return b1 && b2 && b3;
}
public boolean pointInside(Point first, Point last, Point mx, Point cur) {
int x1 = last.xCo - first.xCo;
int y1 = last.yCo - first.yCo;
int x2 = mx.xCo - first.xCo;
int y2 = mx.yCo - first.yCo;
int x3 = …Run Code Online (Sandbox Code Playgroud) 我试图使用Rabin Karp和Binary搜索编写一个最长公共子串程序.为此我写了一个方法,基本上为其中一个字符串创建一个哈希表,键将是从索引i开始的长度为M的模式的哈希值.它们的关键值是索引i.
我写了以下代码:
#include <iostream>
#include <string>
#include<map>
#include<math.h>
#define BASE 10
#define BASE2 10.0
#define M 99999989
using namespace std;
map<int, int> hashmap;
int pHash=0;
int mod(int a, int b) {
return (a%b + b)%b;
}
int getHash(string & pattern) {
int hashVal = 0;
for ( int i =0 ; i<pattern.length();i++) {
int val = (int) pattern[i];
hashVal = mod(hashVal*BASE + val, M);
}
return hashVal;
}
int rabinKarp(string &pattern, string & text)
{
pHash = getHash(pattern);
cout<<"P …Run Code Online (Sandbox Code Playgroud) 我遇到了一个面试问题,他们要求在C++中实现malloc()和free函数.
最开始声明一个大小为50000的char数组(50000字节).假设这是堆内存,编写malloc和free函数来分配内存块并释放内存.
任何人都可以为我提供C++工作/伪代码或只是解释机制?(显然代码会让它更容易理解).
谢谢,罗希特