-
1.
抓交通肇事犯
一辆卡车违反交通规则,
撞人后逃跑。现场有三人目击事件,<
/p>
但都没有记住车号,
只记下车
号的一些特
征
。
甲说:
牌照的前两位数字是相同的;
乙说:
牌照的后两位数字是相同的
,
但与前两位不同;
丙是数学家,他
说:四位的车号刚好是一个整数的平方。请根据以上线索求出车号。
*
问题分析与算法设计
按照题目的要求造出一个前两位数相同、
后两位数相同且相互间又不同的整数
,
然后判断该
整数是否是另一个整数的平方。
< br>
*
程序说明与注释
#include
#include
int main()
{
int i,j,k,c;
for(i=1;i<=9;i++)
/*i:
车号前二位的取值
*/
for(j=0;j<=9;j++)
/*j:
车号后二位的取值
*/
if(i!=j)
/*
判断二位数字是否相异
*/
{
k=i*1000+i*100+j*10+j;
/*
计算出可能的整数
*/
<
br>中国古代数学家张丘建在他的《算经》中提出了著名的“百钱买百鸡问题” <
br>20
for(c=31;c*c
判断该数是否为另一整数的平方
*/
if(c*c==k)
printf(
–
No. is
%d.n
若是,打印结果
*/
}
}
*
运行结果
Lorry _ 7744
2
.百钱百鸡问题
:鸡翁
一,值钱
五,鸡母一,值钱三,鸡雏三,值钱一,百钱买百鸡,问翁、母、雏各几何?<
/p>
*
问题分析与算法设计
设鸡翁、鸡母、鸡雏的个数分别为
x,y,z
,题意
给定共
100
钱要买百鸡,若全买公鸡最多买
只,显然
x
的
值在
0~20
之间;同理
,
y
的取值范围在
0~33
之间,可得到下面的不定方程:
5x+3y+z/3=100
x+y+z=100
所以此问题可归结为求这个不定方程的整数解。
由程序设计实现不定方程的求解与手工计算不同。
在分析确定方程中未知数变
化范围的前提
下,可通过对
未知数可
变范围的穷举,验证方程在什么情况下成立,从而得到相应的解。
*
程序说明与注释
#include
int main()
{
int x,y,z,j=0;
printf(
for(x=0;x<=20;x++)
/*
外层循环控制鸡翁数
*/
for(y=0;y<=33;y++) /*
内层循环控制鸡
母数
y
在
0~33
变化
*/
{
z=100-x-y; /*
内外层循环控制下,鸡雏数
z
的值受
x,y
的值
的制约
*/
if(z%3==0&&5*x+3*y+z/3==100)
/*
验证取
z
值的合理性及得到一组
解的合理性
*/
printf(
}
}
3
.三色球问题
若一个口袋中放有
12
个球,其中有
3
个红的。
3
个白的和
6
个黒的,问从中任取
8
个
共有
多少种不同的颜色搭
配?
*
问题分析与算法设计
设任取的红球个数为
i
,
白
球个数为
j
,
则黒球个数为
8-i-j
,
根据题意红球和白球个数的取值
p>
范围是
0~3
,
在红球和白球个数确定的条件下,黒球个数取值应为
8-i-j
<=6
。
*
程序说明与注释
#include
int main()
{
int i,j,count=0;
printf(
printf(
n
for(i=0;i<=3;i++) /*
循环控制变量
i<
/p>
控制任取红球个数
0
 ̄
< br>3*/
for(j=0;j<=3;j++) /*
循
环控制变量
j
控制任取白球个数
0
p>
 ̄
3*/
if((8-i-j)<=6)
printf(
}
4
.马克思手稿中的数学题
马克思手稿中有一道趣味数学问题:有
30
个人
,其中有男人、女人和小孩,在一家饭馆吃
饭花了
50
先令;每个男人花
3
先令,每个女人花
2
先令,每个小孩花
1
先令;问男人、女
人和小孩各有几人?
*
问题分析与算法设计
设
x,y,z
分别代表男人、女人和小孩。按题目的
要求,可得到下面的方程:
x+y+z=30 (1)
3x+2y+z=50 (2)
用方程程序求此不定方程的非
负整数解,可先通过
(2)-(1)
式得:
2x+y=20 (3)
由
(
3)
式可知,
x
变化范围是
0~10
*
程序说明与注释
#include
int main()
{
int
x,y,z,count=0;
printf(
printf
(
for(x=0;x<=10;x++)
{
y=20-2*x; /*x
定值据
(
3)
式求
y*/
z=30-x-y;
/*
由
(1)
式求
z*/
if(3*x+2*y+z==50)
/*
当前得到的一组解是否满足式
(2)*/
printf(
}
}
5
.新娘和新郞
三对情侣参加婚礼,三个新郞为
A
、
B
、
C
,三个新娘为
X
、
Y
、
Z
。有人不知道谁和谁结婚,
于是询问了六位新人中的三位
,但听到的回答是这样的:
A
说他将和
X
结婚;
X
说她的未
< br>婚夫是
C
;
C
< br>说他将和
Z
结婚。这人听后知道他们在开玩笑,全是假话
。请编程找出谁将和
谁结婚。
*
问题分析与算法设计
将
A
、
B
< br>、
C
三人用
1,2
,
3
表示,
将
X
和
A
结婚表示为
“
X=1
”
,
将
Y
不与
A
结婚表示为
“
Y!=1
”
。
按照题目中的叙述可以写出表达式:
x!=1
A
不与
X
结婚
x!=3 X
的未婚夫不是
C
z!=3
C
不与
Z
结婚
题意还隐含着
X
、
Y
、
Z
三个新娘不能结为配偶,则
有:
x!=y
且
x!=z
且
y!=z
穷举以上所
有可能的情况,
代入上述表达式中进行推理运算,
若假设的情况
使上述表达式的
结果均为真,则假设情况就是正确的结果。
*
程序说明与注释
#include
int main()
{
int x,y,z;
for(x=1;x<=3;x++) /*
穷举
x
的全部可能配偶
*/
for(y=1;y<=3;y++) /*
穷举
y
的全部可能配偶
*/
for(z=1;z<=3;z++) /*
穷举
z
的全部可能配偶
*/
if(x!=1&&x!=3&&z!=3&&x!=y&&x!=z&&y!=z)
/*
判断配偶是否满足题意
*/
{
printf(
打印判断结果
*/
printf(
printf(
}
}
*
运行结果
X will marry to B. (X
与
B
结婚
)
Y will
marry to C. (Y
与
C
结
婚
)
Z will marry
to A. (Z
与
A
结婚
)
6
.委派任务
p>
某侦察队接到一项紧急任务,要求在
A
、<
/p>
B
、
C
、
D
、
E
、
F
六个队员中尽可能多地挑若干人,
但有以下限制
条件:
1)A
和
B
两人中至少去一人;
2)A<
/p>
和
D
不能一起去;
3)A
、
E
和
F
三人中要派两人去;
4)B
和
C
都去或都不
去;
5)C
和
D
两人中去一个;
6)
若
D
不去,则
E
也不去。
问应当让哪几个人去?
*
问题分析与算法设计
用
A
、
B
< br>、
C
、
D
、
E
、
F
六
个变量表示六个人是否去执行任务的状态,变量的值为
1
,则表
示该人去;变量的值为
0
,则表示该人
不参加执行任务,根据题意可写出表达式:
a+b>1 A<
/p>
和
B
两人中至少去一人;
a+d!=2 A
和
D
p>
不能一起去;
a+e+f==2 A
p>
、
E
、
F
三人中要派两人去;
b+c==0
或
b+c==2 B
p>
和
C
都去或都不去;
c+d==1 C
和
D
两人中去一个;
d+e==0
或
d==1
若
D
不去,则
E
也不去
(
都不去;或
D
去
E
随便
)<
/p>
。
上述各表达式之间的关系为“与”关
系。穷举每个人去或不去的各种可能情况,代入上述表
达式中进行推理运算,使上述表达
式均为“真”的情况就是正确的结果。
*
程序说明与注释
#include
int main()
{
int a,b,c,d,e,f;
for(a=1;a>=0;a--)
/*
穷举每个人是否去的所有情况
*/
for(b=1;b>=0;b--)
/*1:
去
0:
不去
*/
for(c=1;c>=0;c--)
for(d=1;d>=0;d--)
for(e=1;e>=0;e--)
for(f=1;f>=0;f--)
if(a+b>=1&&a+d!=2&&a+e+f==2
&&(b+c==0||b+c==2)&&c+d==1
&&(d+e==0||d==1))
{
< br>printf(
printf(
printf(
printf(
printf(
printf(
}
-
-
-
-
-
-
-
-
-
上一篇:测绘专业英语课文翻译
下一篇:中国剪纸Chinese paper cutting