用c语言组合排列实现0-10的奇数问题——原创
如何实现0-10所能组成的奇数个数 和第10位奇数是多少以及奇数的总个数是多少?
程序分析:
我们可以从问题中不难得出 这个问题属于排列组合的问题 比如设这个数为:a1a2a3a4a5a6a7a8a9a10,a1-a10标识这个数的某位的数值 如果最后一个数字为奇数则得出此数字一定是奇数 不管几位是什么数字 如果最后一位是偶数 那么此数字一定是偶数
a1-a10可以取0-9这十个数字 首位数字不为0的个数。
从该数为1位数时到该数为10位数时开始统计奇数个数是多少比如:
1:当只有一位数时也就是该数的最后一位为个数 奇数的个数为1 3 5 7 9 一共5个奇数
2:当该数为俩位时 奇数个数为5*9=45
3:当该数字为三位数字时候 数字个数为:5*10*9=150
4:当该数字为8位数时个数就是5*10*10*10*10*10*10*9=45000000(依次为最后一位到第一位)
以此类推求出到8位数的个数是多少
思路:
首先我们在main函数里定义一个数组指针的指针和int型的证书argc
定义long型初始化为5的表示只有一位数字的奇数个数为5 intj循环从2开始 到10结束
If条件判断当函数j<=2时为1-9的数如果j小于等于2则输出s累乘9的结果else是大于2的情况累乘10的结果每循环一次输出一次 最后跳出循环printf输出奇数的个数为从当前j-1指针前移得出的累乘结果 并输出奇数个数为sum
最后打印出
实验总结:
本次代码实验的整体思路是排列组合的问题 推导出集中的可能性值从而输出相应的结果问题每次实验前都可以先画一个思维导图来判断程序的问题和走向
代码:
#include<stdio.h>
int main(int agrc, char*agrv[])
{
long sum = 5, s = 5;
int j;
for (j = 2; j <= 10; j++)
{
printf("%d位数为奇数的个数%ld\n", j-1, s);
if (j <= 2)
s *= 9;
else
s *= 10;
sum += s;
}
printf("%d位数为奇数的个数%ld\n", j-1, s);
printf("奇数的总个数为:%ld\n", sum);
return 0;
}
结果截图:
- 点赞
- 收藏
- 关注作者
评论(0)