说明:大、中、小马都必须有,结果中要列出所有的组合可能每个结果占一行因为有多个结果,结果的排序按照大马的个数从少到多 #include
for(x=1;x<33;x++) for(y=1;y<50;y++) {z=(100-3*x-2*y)*2; if(x+y+z==100) printf(\ } }
5.24 四大湖问题
我国有4大淡水湖。
A说:洞庭湖最大,洪泽最小。鄱阳湖第三。 B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每人仅答对了一个,请你编程给出4个湖从大到小的顺序。 #include
int a,b,c,d;
for(a=1; a<=4; a++)
for(b=1; b<=4; b++) {
if(b==a) continue; for(c=1; c<=4; c++) {
if(c==a||c==b) continue; for(d=1; d<=4; d++) {
if(d==a||d==b||d==c) continue;
if((b==1||d==4||a==3)==1&&(d==1||b==4||a==2||c==3)==1&&(d==4||b==3)==1&&(a==1||c==4||d==2||b==3)==1)
{
if(a==1) printf(\鄱阳湖\\n\
if(a==2) printf(\鄱阳湖\\n\
if(a==3) printf(\鄱阳湖\\n\
if(a==4) printf(\鄱阳湖\\n\
if(b==1) printf(\洞庭湖\\n\
if(b==2) printf(\洞庭湖\\n\
if(b==3) printf(\洞庭湖\\n\
if(b==4) printf(\洞庭湖\\n\
if(c==1) printf(\太湖\\n\
if(c==2) printf(\太湖\\n\
if(c==3) printf(\太湖\\n\
if(c==4) printf(\太湖\\n\
if(d==1) printf(\洪泽湖\\n\
if(d==2) printf(\洪泽湖\\n\
if(d==3) printf(\洪泽湖\\n\
if(d==4) printf(\洪泽湖\\n\
break; } }
break; }
break; } return 0; }
选做 5.25 黑色星期五 在西方,星期五和数字 13 都代表着坏运气,两个不幸的个体最后结合成超级不幸的一天。所以,
- 16 -
不管哪个月的13日又恰逢星期五就叫 “ 黑色星期五 ” 。输入某年年号和该年的元旦是星期几( 1-7),输出该年所有的 “ 黑色星期五 ” 的日期(年 /月/日) 。
输入: 4位年号和该年元旦是星期几
输出: 所有的 “黑色星期五”的日期(年/月/日) #include
int y,m,d,x;
scanf(\ for(m=1; m<=12; m++) {
if(m==1||m==3||m==5||m==7||m==8||m==10||m==12)
{
for(d=1; d<=31; d++) {
if(d==13&&x==5)
printf(\ x++; if(x==8) x=1; } }
if(m==4||m==6||m==9||m==11) {
for(d=1; d<=30; d++) {
if(d==13&&x==5)
printf(\ x++; if(x==8) x=1; } }
if(((y%4==0&&y0!=0)||y@0==0)&&m==2) {
for(d=1; d<=29; d++)
{
if(d==13&&x==5)
printf(\ x++; if(x==8) x=1; } }
if(y%4!=0&&m==2) {
for(d=1; d<=28; d++) {
if(d==13&&x==5)
printf(\ x++; if(x==8) x=1; } } }
return 0; }
选做 5.26 抓疑犯
某地刑侦大队对涉及六个嫌疑人的一桩疑案进行分析:
(1) A 、 B 至少有一人作案;
(2)A 、 E 、 F 三人中至少有两人参与作案; (3)A 、 D 不可能是同案犯;
(4)B 、 C 或同时作案,或与本案无关; (5) C 、 D 中有且仅有一人作案;
(6)如果 D 没有参与作案,则 E 也不可能参与作案。
试编一程序,将作案人找出来。 输出格式为(以下结果不是最终答案): A:不是罪犯 B:是罪犯 C:是罪犯 D:不是罪犯 E:不是罪犯 F:是罪犯
#include
- 17 -
int main() {
int A,B,C,D,E,F; for(A=0; A<=1; A++) for(B=0; B<=1; B++) for(C=0; C<=1; C++)
for(D=0; D<=1; D++) for(E=0; E<=1; E++) for(F=0; F<=1; F++)
if(A+B>=1&&A+E+F>=2&&A+D==1&&(B+C==0||B+C==2)&&C+D==1&&(D+E==0||D+E==2)) {
if(A==1)
printf(\是罪犯\\n\
if(A==0)
printf(\不是罪犯\\n\
if(B==1)
printf(\是罪犯\\n\
if(B==0)
printf(\不是罪犯\\n\
if(C==1)
printf(\是罪犯\\n\
if(C==0)
printf(\不是罪犯\\n\
if(D==1)
printf(\是罪犯\\n\
if(D==0)
printf(\不是罪犯\\n\
if(E==1)
printf(\是罪犯\\n\
if(E==0)
printf(\不是罪犯\\n\
if(F==1)
printf(\
是罪犯\\n\
if(F==0)
printf(\不是罪犯\\n\
} return 0; }
选做 5.27 零钱换整钱
小明去银行存钱,拿了一堆硬币。已知 1 角的硬币厚度为 1.8mm , 5 角的硬币厚 1.5mm , 1 元的硬币为 2.0mm 。小明将 1 角的硬币放成一摞,将 5 角的硬币硬币放成一摞,将 1 元的硬币放成一摞,发现 3 摞硬币一样高。银行正好把这些硬币换成若干张面值为 10 元的纸币。问小明至少带了多少钱的硬币(元为单位),每种面值的硬币有多少个?
输入: 无 输出: 1 角的数量,5 角的数量,1元的数量,总金额。(例如:20,30,40,50)
说明: 在结果中只输出各个对应的数字即可 #include
int a,b,c,d;
for(a=1; a<=100; a++)
for(b=1; b<=100; b++) for(c=1; c<=100; c++)
if(20*a==15*b&&20*a==18*c) {
d=(a*10+b*5+c)0; if(d!=0) break;
d=(a*10+b*5+c)/10;
printf(\ } return 0; }
选做 5.28 马戏团观众人数 一个马戏团表演, n 个座位全满,全部门票收入是 120 元,现在知道,男人每人 5 元,女人每人 2 元,小孩每人 1 角。编程,输入总人数 n ,输出满足要求的男人、女人和小孩人数的全部方案。若 n 人
- 18 -
无法满足条件,则输出“No output\\n”。 输入: 人数 n
输出: 男人、女人和小孩人数 #include
int n,a,b,c;
scanf(\ for(a=0; a<=24; a++)
for(b=0; b<=(120-5*a)/2; b++)
for(c=0; c<=(120-5*a-2*b)*10; c++)
if(5*a+2*b+c/10==120&&a+b+c==n)
printf(\ return 0; }
选做 5.29 爱因斯坦的数学题
爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶;若每步跨3阶,则最后剩2阶;若每步跨5阶,则最后剩4阶;若每步跨7阶,最后才正好一阶不剩。请问,这条阶梯共有多少阶?
输出语句格式为:printf(\number = %d\\n\ #include
int number;
for(number=1; number<=1000; number++)
if(number%2==1&&number%3==2&&number%5==4&&number%7==0) {
printf(\number = %d\\n\ break; } return 0; }
选做 5.30 抓交通肇事犯
一辆卡车违反交通规则,撞人后逃跑。现场有三人目击事件, 但都没有记住车号,只记下车号的一些
特征。甲说:牌照的前 两位数字是相同的;乙说:牌照的后两位数字是相同的,但与 前两位不同;丙是位数学家,他说:四位的车号刚好是一个整 数的平方,请根据以上线索求出车号。 #include
int a,b,c,n;
for(a=0; a<=9; a++)
for(b=0; b<=9; b++) if(a!=b) {
n=1100*a+11*b;
for(c=30; c<1000; c++) if(n==c*c)
printf(\is:%d\\n\ } return 0; }
5.31 求和
输入整数 m 和正整数 n ,按下列公式计算 s : s=m-(m+1)+m+2-(m+3)+ ?? +(-1)n(m+n) 。 输入: m 和 n 输出: s
#include
int i,sign=1,m,n,s=0,t; scanf(\ for (i=0;i<=n;i++) { t=sign*(m+i); sign=-sign; s=s+t; }
printf(\ }
5.32 计算SUM的值
已知公式:SUM = 1 + 1/2 + 1/3 + 1/4 + ... + 1/n 输入:n
输出:表达式 sum 的值。结果保留 6 位小数
- 19 -
#include
int i,n;
float s = 0.0, t; scanf(\ for (i=1;i<=n;i++) { t=1.0/i; s+=t; }
printf(\ return 0; }
5.33 迭代法
用迭代法求.求平方根的迭代公式为:
要求前后两次求出的x的差的绝对值小于10-5。 #include
double x1,x2,a; scanf(\ {
x2=1.0; do {
x1=x2;
x2=0.5*(x1+a/x1); }
while(fabs(x2-x1)>=1e-5);
printf(\ }
return 0; }
5.34 分数序列
有一个分数序列:...............,输入整数n,求出其前n项的和。
输出语句格式为:printf(\#include
int a,b,c,n,i; double s;
}
scanf(\a=2,b=1,s=0; for (i=1;i<=n;i ++) { s+=(1.0*a/b); c=b; b=a; a=a+c; }
printf(\return 0;
5.35 求e的值
编写程序,从键盘输入整数 n , 求 e 的值 . e=1+1/1!+1/2!+1/3!+..+1/n! 注意:用 double 型数据计算输出语句:printf(\ #include
double e=1.0,f=1.0; int n,i;
scanf(\ for(i=1;i<=n;i++) {
f=f/i; e=e+f; }
printf(\ }
5.36 编程计算
编写程序,输入n的值,求 :1-1/2+1/3-1/4+1/5-1/6+1/7-...+1/n (保留四位小数) #include
int i, sign = 1, n; float s = 0.0, t; scanf(\ for (i = 1; i <= n; i ++)
{ t = 1.0 / (sign * i); sign = -sign; s += t; } printf(\ return 0; }
5.37 cos(x)-x=0
- 20 -