构造平衡布尔函数,当输入为5时就跑不出来了,有没有可以简化算法的方法
#include<stdio.h>
#include<math.h>
int pd(long long a,long long c)
{
long long a1=a;
long long a2;
long long b1=0,b0=0;
// if(a1==1||a1==0)
// {
// prlongf("%d\n",a1);
// }
while(a1>=2){
a2=a1%2;
// printf("%d",a2);
if(a2==1)
b1++;
else
b0++;
a1=a1/2;
}
//printf("%d",a1);
if(a1==1)
b1++;
else
b0++;
if((b1+b0)%c!=0)
{
b0=b0+(c-(b1+b0)%c);
}
//printf("\n");
if(b1==b0)
{
return 1;
}
else
return 0;
}
int main()
{
long long n;
long long t=0;
scanf("%lld",&n);
long long c = pow(2,n);
long long b = pow(2,c);
for(long long i=0;i<b;i++)
{
if(pd(i,c)==1)
t++;
}
printf("%lld元平衡布尔函数有%lld",n,t);
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
long long n;
long long t = 0;
scanf("%lld", &n);
long long c = pow(2, n);
long long b = pow(2, c);
// 构造平衡布尔函数
for (long long i = 0; i < b; i++) {
long long count = 0;
long long temp = i;
while (temp > 0) {
if (temp % 2 == 1) {
count++;
}
temp /= 2;
}
if (count == c / 2) {
t++;
}
}
printf("%lld元平衡布尔函数有%lld",n,t);
return 0;
}
//41.定义一个含有30个整型元素的数组
//按顺序赋予从2开始的偶数,然后按顺序以每5个数一组的形式求出平均值并输出
#include<stdio.h>
main()
{
int a[30],i,j=2,b=0,c;
for(i=0;i<30;i++)
{
a[i]=j;
j=2+j;
c=a[i]+c;
b++;
if(b%5==0)
{
printf("%d\t",c/5);
c=0;
}
}
printf("\n");
j=0;
for(i=0;i<30;i++)
{
printf("%d\t",a[i]);
j++;
if(j%5==0)
printf("\n");
}
}
运行结果: