我希望生成一个1*672的0-1向量v,v只有四位是1,其他位是0。
所以当我输入四个1到672之间的序数时,可以输出符合上述条件的v。
谢谢!
#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;
}
672位是84个字节
可以用unsigned char vec[84]表示
具体确定置位可以用除8,余8来确定
举例第一百位,vec[100/8]|1《100%8
组合问题?
没太明白具体的需求,是使用16位 代替 0 - 1 分成672么?