题目:求0—7所能组成的奇数个数。 输出所有的奇数

题目:求0—7所能组成的奇数个数。

程序源代码:
main()
{
long sum=4,s=4;
int j;
for(j=2;j<=8;j++)/*j is place of number*/
{ printf("\n%ld",sum);
if(j<=2)
s*=7;
else
s*=8;
sum+=s;}
printf("\nsum=%ld",sum);
}
麻烦重写个好点的,加注释的程序,这个我看不懂哈!!!

这道题说的有问题,如果求0—7所能组成的奇数个数那就有无数个!!!应该是求0—7所能组成的‘不超过 j 位’奇数的个数。上面那个程序中的 j 就是这个意思。
1位的时候是p(4,1)=4个。(1,3,5,7)
2位的时候是p(7,1)*p(4,1)=7*4个。(十位可为1-7任意一个数,个位为1,3,5,7中一个)
3位的时候是p(7,1)*p(8,1)*p(4,1)=7*8*4个。(百位为1-7中,十位0-7中,个位1,3,5,7中)
4位的时候是p(7,1)*p(8,1)*p(8,1)**p(4,1)=7*8*8*4个。
.............
此外还有一个累加的过程,不超过两位的奇数就是一位的+两位的=4+4*7=32
上面那个程序就是这个原理!!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-11-03
刷到这题,一开始看到的答案有些懵。于是就通过答案来确定原题是怎么一回事。
0-7的数字,组成的不超过7位数的奇数的个数。
由固定数量的数字组成的数,首先想到的是进制。这里是0-7,8个数字。于是该题就变成了8进制下 77777777之内有多少个奇数的问题。显然就是8!/2=8388608。
第2个回答  2020-08-27
这个题目有点问题,它没说计算出多少位,又没说是否能重复数字头疼的题目
第3个回答  2017-08-03
public static void main(String[] args) {
int sum=32;
for(int i=3;i<=7;i++)
{
sum+=(sum*8);
System.out.println(sum);
}
第4个回答  推荐于2017-10-06
public class Test43{
public static void main(String[] args){
int count = 0;
//声明由数字组成的数
int n = 8;
//一位数
count = n/2;
//两位数
count += (n-1)*n/2;
//三位数
count += (n-1)*n*n/2;
//四位数
count += (n-1)*n*n*n/2;
//五位数
count += (n-1)*n*n*n*n/2;
//六位数
count += (n-1)*n*n*n*n*n/2;
//七位数
count += (n-1)*n*n*n*n*n*n/2;
System.out.println("0-7所能组成的奇数个数:"+count);
}
}
这个是不大于七位的数字允许重复的奇数个数,想要几位的话可以自己改。本回答被提问者采纳
相似回答