生成四位为1的672位0-1向量

我希望生成一个1*672的0-1向量v,v只有四位是1,其他位是0。
所以当我输入四个1到672之间的序数时,可以输出符合上述条件的v。
谢谢!

img


源程序:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char s[672];
int i=0,a,b,c,d;
for(i=0;i<=672;i++)
s[i]='0';
scanf("%d %d %d %d",&a,&b,&c,&d);
printf("(%d,%d,%d,%d) V is :\n",a,b,c,d);
s[a]='1';s[b]='1';s[c]='1';s[d]='1';
for(i=1;i<=672;i++)
printf("%c",s[i]);
return 0;
}

#include <stdio.h>
int zh(int n, int *num)
{

    int t = 0;
    if (n != 0)
    {
        t = n % 2; // 取余数
        n = n / 2;
        zh(n, num);
        if (t == 1)
        {
            (*num)++;
        }
    }
    return 0;
}
int main(void)
{
    int num = 0;
    int a[4] = {0};
    int flag = 0;
    printf("输入4个1-672之间的序数\n");
    for (int i = 0; i < 4; i++)
    {
        scanf("%d", &a[i]);
    }
    printf("符合上述条件的v如下\n");
    for (int i = 0; i < 4; i++)
    {
        num = 0;
        zh(a[i], &num);
        if (num == 4)
        {
            printf("%d\n", a[i]);
            flag = 1;
        }
    }
    if (flag == 0)
    {
        printf("没有发现\n");
    }
    return 0;
}

img

672位是84个字节

可以用unsigned char vec[84]表示

具体确定置位可以用除8,余8来确定

举例第一百位,vec[100/8]|1《100%8

组合问题?

参考一下

没太明白具体的需求,是使用16位 代替 0 - 1 分成672么?