一道c语言编程题,高分求助,在线等!

2024-12-17 23:02:10
推荐回答(3个)
回答1:

对不起,bool在C语言是没有的,改成int就对了。其他的应该都没什么问题了,以下代码有注释,不懂可以问我

#include

int isA(int n) //函数判断是否A类数,是返回1,否则返回0
{
int m = n;
int one = 0; //1的个数
int zero = 0; //0的个数
while (m)
{
if (m % 2) //如果不能被2整除,最低位就是1
{
one++;
}
else //否则就是0
{
zero++;
}
m /= 2;
}
if (one > zero)
{
return 1;
}
return 0;
}
void main()
{
int i, n;
int a = 0; //A类数的个数
int b = 0; //B类数的个数
int acount[1000]; //保存A类数
int bcount[1000]; //保存B类数
for (i = 1; i <= 1000; i++) //1到1000求A、B类数的个数
{
if (isA(i))
{
a++;
}
else
{
b++;
}
}
printf("A类数:%d B类数:%d\n", a, b);
a = 0;
b = 0;
scanf("%d", &n);
for (i = 1; i <= n; i++) //求1到n,A、B类数
{
if (isA(i))
{
acount[a] = i;
a++;
}
else
{
bcount[b] = i;
b++;
}
}
printf("A类数:\n");
for (i = 1; i < a; i++) //打印A类数
{
printf("%d ", acount[i]);
if (i % 2 == 0)
{
printf("\n");
}
}
printf("\nB类数:\n");
for (i = 1; i < b; i++) //打印B类数
{
printf("%d ", bcount[i]);
if (i % 2 == 0)
{
printf("\n");
}
}
}

回答2:

#include
#include

void NumberOf1and0_Solution(int i,int* count0,int* count1)
{
*count0 = 0;
*count1 = 0;

while(i)
{
if(i & 1)
*count1+=1;
else *count0+=1;

i = i >> 1;
}
}

void main()
{
int N,countA=0,countB=0;
int nZero,nOne,i;

for(i=1;i<=1000;i++)
{
NumberOf1and0_Solution(i,&nZero,&nOne);

if(nOne>nZero) countA++;
else countB++;
}

printf( "1~1000之间,A类数有%d个,B类数有%d个\n",countA,countB);
system( "pause ");
}

回答3:

.