带有分配的MEMSET

Memset with assignment

本文关键字:MEMSET 分配      更新时间:2023-10-16

我有一个问题:"多个测试(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) );

有关详细信息,请参阅此信息。