【关键词】
中小学编程;信息学编程;IT航班;奥林匹克;北京少儿编程;北京中小学编程;
【美联航达导读】
奥数与信息学奥赛具有天然的联系,两者可以相互促进。很多问题奥数上叫猜测,孩子从一些特殊数值不断去测试是否满足条件(相等、大于、等于、加一、减一、平方等)。信息学奥赛叫穷举,让计算机去试。今天一位家长问的试题,我们通过常规数学不断试数据,另外一种方法通过计算机来测试。做个对比,更深刻认知编程。
2017年华罗庚数学竞赛小学中年级初赛试题第9题。
11个方队(正方形实心方队)中的每一个都是由数量相同的士兵组成,如果算上将军,就可以组成一个大的攻击方队.则原来方队里最少要有士兵 人.
正方形方阵的特点是:行、列数相等。例如,1的方阵总数是1个,2的方阵总数是4,3的方阵总数是9,4的方阵总数是16。
常规解法:设未知数,列方程、如果多个未知数,开始猜。
假设原来每个方阵每行有a人(每列也有a人),则11个方阵共有:
11×a×a名士兵
现在增加了1名将军,仍然可以组成一个大的方阵(假设新方阵每行有b人),故:
11×a×a + 1 = b×b
这个“方程”中有2个未知数,我们可以“猜答案”,问题希望原来方阵中士兵数最少——a最小,所以我们就从最小的值开始猜:
若a = 1,则:11×1×1 + 1 = 12 = b×b,没有满足条件的b;
若a = 2,则:11×2×2 + 1 = 45 = b×b,没有满足条件的b;
若a = 3,则:11×3×3 + 1 = 100 = b×b,b = 10!
所以,原来一个方阵中最少有——3×3=9名士兵。这需要不断的实验,花费很多时间。如果计算机,怎么做呢?
#include <iostream>
using namespace std;
int main()
{
for(int b = 1; b < 100; b++)
{
for(int a = 1; a < b; a++)
{
if(11*a*a+1 == b*b)//数学公式放在这里了。
{
cout<<a<<”\t”<<b<<endl;
break;
}
}
}
return 1;
}
为什么要编程呢,就是有些问题猜测数字太多,人都迷糊了,还没有猜测出来。而计算机不会迷糊,更不会累,也不要吃饭,猜测的又快又准。所以,复杂的猜测用编程来解决。
以后我们多找一些奥数的题目,用编程来解决。
A、官方网址:
B、微信公众号:
添加微信,获取资料。
关注公众号,获取动态。