带有分配的MEMSET
Memset with assignment
我有一个问题:"多个测试(t测试),每个测试都打印所有带长n的字符串,并包含h数字1。"
。这是我的代码:
#include <iostream>
#include <memory.h>
using namespace std;
typedef long long LL;
LL t,N,H;
LL arr[1000];
bool used[1000];
LL num = 0;
void show(){
LL number = 0;
for (LL u = 0; u<1000; u++)
{
if (arr[u]==2)
{
number++;
}
}
if (number==H)
{
for (LL v = 0; v<1000; v++)
{
if (arr[v])
{
cout << arr[v] - 1;
}
}
cout << "n";
}
}
void backtrack (LL pos){
if (pos==N+1)
{
num = 0;
show();
return;
}
if (!used[pos])
{
for (LL j = 1; j<=2; j++)
{
if (j==2)
{
if (num==H)
{
break;
}
else
{
num++;
}
}
arr[pos] = j;
used[pos] = true;
backtrack(pos+1);
used[pos] = false;
}
}
}
int main(){
ios::sync_with_stdio(false);
cin >> t;
for (LL i = 0; i<t; i++)
{
cin >> N >> H;
//memset(arr, sizeof(arr), 0);
for (LL cv = 0; cv<1000; cv++)
{
arr[cv] = 0;
}
backtrack(1);
if (i<t-1)
{
cout << "n";
}
}
return 0;
}
我在使用" memset(arr,sizeof(arr),0)的情况下遇到了麻烦; - 它返回了错误的答案。但是在相同的测试中,当我使用for-loop分配等于0的数组" arr"中的所有元素时,它返回了正确的答案。
我的测试是:24 23 1
我要求知道孟买和循环之间的区别(用于分配)。谢谢。
memset
进行三个参数。第一个是指向填充内存块的指针(您的 arr
),第二个是要设置的值,第三个是要填充的字节数。
如果您想更深入的话,这是memset
的文档。
在您的代码中,我阅读
memset(arr, sizeof(arr), 0)
读为"填充0字节的尺寸"。
您只给出了错误的参数,应该是:
memset(arr, 0, sizeof(arr))
memset的第二个参数应为 value ,第三个是大小。使用此:
memset(arr, 0, sizeof(arr) );
有关详细信息,请参阅此信息。
相关文章:
- 将数组的地址分配给变量并删除
- vector.resize()中的分配错误
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- Win32编译器选项和内存分配
- 函数中堆分配的效果与缺少堆分配的情况
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 获取字符串的长度并将其分配给数组
- 将地址分配给本地指针后,公共对象的变量将消失
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 我在二维向量中是否正确分配了内存
- 正在尝试重载二进制搜索树分配运算符
- GlobalAlloc而不是其他分配方法
- 自定义先决条件对移动分配运算符有效吗
- 我可以重新分配/覆盖std::字符串吗
- 在c++中使用动态分配的问题
- 带有分配的MEMSET
- 在分配之前,memset() 一个 std::itrator 变量是否安全
- 引用或复制结构的结构(已分配的memset)是一件有效的事情