第1个回答 2005-12-30
/*
求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();
}
第2个回答 2019-07-28
/*测试通过,楼上的错了,只算了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;
}