【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?
众所周知,数学逻辑无孔不入,那么如何结合自己想奥数题的逻辑来编写代码呢
目录
1.猜凶手
2.猜名次
3.杨辉三角
1.猜凶手
题目
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。那么谁是凶手
首先,一个人是不是凶手怎么表达呢,可以用1/0,凶手记为1
所以ABC三个人都有两种可能性,凶手1,好人0
那么就是一个排列组合问题,对应代码就是循环
其中的一个分叉是这样的
观察发现,A==1结果是1 A!=1 的结果是0
如果三个人说的是真的,那么这四个人的话用代码表达出来变成四个表达式
四个表达式之和就应该=3
但是仅仅这样写,发现结果不止一个
因为我们遗漏很重要的显然条件凶手只有一个
那么四个人加起来=1
答案呼之欲出
//猜凶手
//A说:不是我。
//
//B说:是C。
//
//C说:是D。
//
//D说:C在胡说
//
//已知3个人说了真话,1个人说的是假话。
#include<stdio.h>
int main()
{int A, B, C, D;for (A = 0; A <2; A++){for (B = 0; B <2; ++B){for (C = 0; C <2; ++C){for (D = 0; D <2; ++D){if ((!A)+(C)+(D)+(!D)==3&&A+B+C+D==1)printf("A=%d B=%d C=%d D=%d\n", A, B, C, D);}}}}}
2.猜名次
题目
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一;
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
有了上个题目的铺垫,这个题的思路就自然很多,循环从上个题目的3层,变成5层,因为有5个人
同样是每个人的两个判断表达成两个表达式,
由于吗,每个人只有一半说对了
所以一个人说的两句话相加应该=1
并且五个人一定要每个人都有名次,也就是12345
所以五个人相乘应该等于1*2*3*4*5=1203.
答案已经出来了
//5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果:
//A选手说:B第二,我第三;
//
//B选手说:我第二,E第四;
//
//C选手说:我第一,D第二;
//
//D选手说:C最后,我第三;
//
//E选手说:我第四,A第一;
//
//比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
#include<stdio.h>
int main()
{int A, B, C, D, E ;for (A = 1; A <= 5; A++){for (B = 1; B <= 5; ++B){for (C = 1; C <= 5; ++C){for (D = 1; D <= 5; ++D){for (E = 1; E <= 5; ++E){if ((B == 2) + (A == 3)==1 && (B == 2) + (E == 4) == 1 && (C == 1) + (D == 2) == 1 && (C == 5) + (D == 3) == 1 && (E == 4) + (A == 1) == 1 &&A*B*C*D*E==120)printf("A=%d B=%d C=%d D=%d E=%d", A, B, C, D, E);}}}}}
}
以上两个题是一类问题:判断n个人,每个人说了m句话,其中只有一部分是对的,最后找到结论
思路:
把人抽象为数字,比如用名次12345...代表,或者0/1代表是不是凶手,好人之类
然后写n层循环
每个人的话写成m个表达式
具体分析什么条件(if)成立,则题目得解
3.杨辉三角
具体运算我们都知道,但是如果只是这样很直白的想,是很难实现的
数学解法是直白的,但是代码实现是灵活的
一个数等于上方两个数之和
int main()
{int n;scanf("%d", &n);int a[100][100];for (int i = 0; i < n; i++){a[i][0] = 1;a[i][i] = 1; //将每行的第一个和最后一个赋值为1 }for (int i = 2; i < n; i++) //已知每个数等于它上方两数的之和 {for (int j = 1; j < i; j++){a[i][j] = a[i - 1][j - 1] + a[i - 1][j];}}for (int i = 0; i < n; i++) //打印输出 {for (int j = 0; j <= i; j++){printf("%d ", a[i][j]);}printf("\n");}
}
【猜凶手,猜名次,杨辉三角】经典小学奥数的代码逻辑是什么?相关推荐
- JAVA——实现杨辉三角的指定行数输出
实现杨辉三角的指定行数输出 1.要求 杨辉三角是一个由数字排列的三角形数表,此方法介绍如何实现控制台输出杨辉三角形. 2.杨辉三角 杨辉三角最本质的特征是:除两侧元素均为1以外,其余每个位置上的元素值 ...
- leetcode119. 杨辉三角 II 你能比我代码更短吗?
给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行. 示例: 输入: 3 输出: [1,3,3,1]按照定义写即可. class Solution:def getRow(self, r ...
- 经典算法(5)杨辉三角
写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字.我热爱技术.热爱开源.热爱编程.技术是开源的.知识是共享的. 这博客是对自己学习的一点点总结及记录,如果您对 Java.算法 感兴 ...
- 算法--组合数学:杨辉三角数学分析以及Java实现
1.定义 杨辉三角,是二项式系数在三角形中的一种几何排列. 下图为杨辉三角部分数据 2.杨辉三角规律 前提:每行端点与结尾的数为1 最重要的规律: 每个数字等于上一行的左右两个数字之和.可用此性质写出 ...
- HTML 杨辉三角,杨辉三角 - 哼哼哈嘿 - OSCHINA - 中文开源技术交流社区
//杨辉三角 n为 行数 function yanghui(n) { /* 逻辑思考 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 这是一个杨辉三角:是计算二 ...
- HDU 6129 Just do it 组合数学 杨辉三角 递推
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6129 题目描述: 将a序列转化成b序列, b[i] = a[1]^a[2]^a[3]^a[4]^.. ...
- 列表生成式的复习以及生成器的练习, 杨辉三角实例(非常巧妙)
列表生成式 print('昨日复习--------------------') d = {'a':1, 'b':2, 'c':3} for key in d:print(key)for value i ...
- 从标数法求最短路径数到杨辉三角的思考
上周旁听了一节小小的学而思数学网课,写一篇心得.一直想写的,但工作日一直都在忙,今天终于有所闲暇,就坐下来写点吧. 上周日,我蹲在边上写代码,小小把电脑搬到餐桌上学而思网课,我侧耳被一道题目吸引了. ...
- 曾经vb,c ,c++,python,写过的杨辉三角,致敬杨老前辈
// 杨辉三角形,又称贾宪三角形,帕斯卡三角形,是二项式系数在三角形中的一种几何排列.杨辉三角形同时对应于二项式定理的系数. 直角三角形杨辉三角 //c语言,求直角的 #include<stdi ...
最新文章
- GT Transceiver中的重要时钟及其关系(3)多个外部参考时钟使用模型
- oracle数据库批量操作系统,Oracle批量操作数据库
- Machine Learning之Python篇(二)
- java中GET方式提交和POST方式提交
- 火狐、IE浏览器实现Extjs的grid表格的复制、粘贴
- 代码自解释不是不写注释的理由
- HEC-RAS二维溃坝洪水模拟(尾矿库)
- java 从键盘中读取字符流 自定义异常
- mac docker 共享_如何在Docker for Mac中加快共享文件访问
- Linux下改动Oracle数据库字符集命令
- 人的差别在于业余时间——细细品味 ==程序员学习能力提升三要素 ==》程序员学习能力提升三要素 ==编程从业五年的十四条经验,句句朴实
- 【python算法】算法之线性增长与二次方增长小实验举例
- 猜拳小游戏(Java代码实现)
- N卡驱动安装闪退,安装程序无反应,重装无效,不重装系统解决方法
- LoRa SX1278通信代码学习笔记
- 旅行青蛙(旅かえる)的最全攻略(不懂日语的可以看看)
- 用python画一个简单卡通人物,Python绘制可爱的卡通人物 | 【turtle使用】
- linux 手机 rom image,安卓手机刷机界面image 文件夹什么意思 里面的文件都是什么作用...
- CALCULATE函数的运算顺序-第一弹
- sklearn机器学习(五)线性回归算法测算房价