乱世佳人的人物介绍:求0~7这8个数字所能组成的1~~8位的奇数的个数???

来源:百度文库 编辑:高考问答 时间:2024/05/09 13:58:23
必须是用C语言回答!!!!欢迎各位高手解答,非常感谢!!

/*测试通过,楼上的错了,只算了7位数字,而且复杂度高,奇数完全有规律,末位只能是1、3、5、7,把i8用上之后跟我下面的程序结果一样。*/

#include <stdio.h>
int P(int a, int b)
{
int num = 0;
int i;
if(b <= 0)
return num;

num = a - 1;//最高为只有a-1种可能,0要排除
//剩下的b-1位中每位有a种可能
for(i = 0; i < b - 1; i++)
{
num *= a;
}

return num;
}

void Test(int a, int b, int c, int d)
{
int num = 0, i, j;
if(a < 0 || a > 9) return ;
if(b < 0 || b > 9) return ;
if(c <= 0) c = 1;
if(d <= 0) d = 1;
if(c > d) return;

for(i = c; i <= d; i++)
{//1到8位数
for(j = a; j <= b; j++)
{//奇数末位必然是1,3,5,7中的一个
if(j % 2)
{
if(i == 1)//如果是1位数直接+1
num++;
else
num += P(8, i - 1);//从8个数中选出i - 1个作为i位数的前i-1位
}
}
}
printf("%d~%d这%d个数字所能组成的%d~~%d位的奇数的个数:%d\n", a, b, b - a + 1, c, d, num);
}

int main(int argc, char** argv)
{
Test(0, 7, 1, 2);
return 0;
}

/*
求0~7这8个数字所能组成的1~~8位的奇数的个数???
*/

#include<stdio.h>

void main()
{
int i1,i2,i3,i4,i5,i6,i7,i8,number,sum=0;
for(i1=0;i1<=7;i1++)
for(i2=0;i2<=7;i2++)
for(i3=0;i3<=7;i3++)
for(i4=0;i4<=7;i4++)
for(i5=0;i5<=7;i5++)
for(i6=0;i6<=7;i6++)
for(i7=0;i7<=7;i7++)
{
number=i1+10*i2+100*i3+1000*i4+10000*i5+100000*i6+1000000*i7;
if(number%2==1)
sum++;
}
printf("sum=%d",sum);
getchar();
}