首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

一道排列组合题的计算机编程解法

上次,我写了一道排列组合题的三种解题思路,题目是这样的:同时包含3和6的不同三位数有多少个?最近,我在学习C语言计算机编程,学到了分支结构和循环结构,刚好可以用来解这道题。

首先,设置一个计数器,初始值为0,然后对所有的三位数(从100到999)做一个大循环,对其中每一个数都进行以下操作:对个位、十位、百位分别进行判断,看是不是3或6,如果这3个数中同时包含3和6,则计数器加1,然后对下一个数进行操作。最终计数器的值就是答案。程序如下:

#include //输入输出头文件

int main()

{

int c,y3,y6,tmp,d; //定义变量

c=0; //计数器清零

for(int i=100;i

{

tmp=i; //用一个临时数保存三位数

y3=0; //变量“有3”清零

y6=0; //变量“有6”清零

while(tmp>0) //临时数大于0时做小循环

{

d=tmp%10; //临时数除以10取余数,取出个位

if(d==3)y3=1; //判断个位是否等于3

if(d==6)y6=1; //判断个位是否等于6

tmp=tmp/10;//临时数截去个位,继续小循环

}

if(y3==1&& y6==1) c++; //如果有3和有6都等于1,计数器加1

}

printf("%d\n",c); //输出结果

return 0; //程序结束

}

运行结果:52,程序运行时间:0.0175秒

总结:通过这次编程,我发现计算机的解题思路跟人类大不相同,人类擅长分析问题,寻找规律,但是计算速度不快,计算量不能太大;计算机只会机械地执行每一条指令,但是计算速度很快,计算量也可以很大。计算机真是人类的好帮手!

附:该题的数学解法(小论文)

一道排列组合题的三种解题思路

天府路小学四年7班 杨松瀚 指导老师:黄爱妹

一、问题的由来

爸爸和我游泳的时候经常考我数学题,有一次,我也想了一道题来考爸爸:同时包含数字3和6的不同三位整数总共有多少个? 经过讨论,我们发现这道题有三种不同的解题思路。

二、我的解题思路:列举法

我的解题思路是:先列出百位所有可能出现的数字,再列出相应的十位和个位数字的可能性,这就是列举法。

百位可分为3、6以及其它7个非零数字。

1、百位是3:(1)十位是6,有360、361、362、……、369共10个;

(2)十位不是6,则个位必须为6,有306、316、326、346、356、376、386、396共有9个;

所以,共有10+9=19(个)。

2、百位是6:同上,也是19个。

3、百位是其它7个非零数字:十位个位只能是36和63两种情况,共7×2=14(个)。

综上,总共有19+19+14=52(个)。

三、爸爸的解题思路:分步法

爸爸的解题思路是把组成三位数的步骤分成两步:第一步,选出三个数字;第二步,将这三个数字排序组成不同的三位数,将这两步求出的个数相乘,就是最终的结果。

根据爸爸的引导,我想已知包含3、6,只需选出第三个数字。(1)选0、3、6:0不能放在百位,由乘法原理,共有2×2×1=4(个)。(2)选3、3、6或3、6、6:有3+3=6(个)。(3)选3、6、剩余7个非零数:由乘法原理共有7×6=42(个)。

综上,总共有4+6+42=52(个)。

四、优化思路

在分步法中,先把特殊数列出来再相加,我们可以优化成先计算总数,再减去0在百位的数和重复的数。3可以在百位、十位、个位有3种排法,6在剩下两个数位上有2种排法,剩下一个数位有0到9种可能,共3×2×10=60(个)。0在百位有2个(036、063),重复计算的有366、633、363、663、336、636,所以只有60-2-6=52(个)。

五、总结

列举法的优点是比较直观,容易理解,缺点是统计数量多的组合比较麻烦,容易漏掉或者重复统计。分步法的优点是条理清晰,可以运用排列组合公式,准确统计个数,难点是分类或分步过程中的条理性把握,比较难掌握。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180331G1F8HL00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券