请使用其它的方法求解本题 15. 16.出售金鱼 买卖提将养的一缸金鱼分五次出售系统上一次卖出全部的一半加二分之一条;第二次卖出余下的三分之一加三分之一条;第三次卖出余下的四分之一加四分之一条;第四次卖出余下的五分之一加五分之一条;最后卖出余下的11条。问原来的鱼缸中共有几条金鱼? *题目分析与算法设计 题目中所有的鱼是分五次出售的,每次卖出的策略相同;第j次卖剩下的(j+1)分之一再加1/(j+1)条。第五次将第四次余下的11条全卖了。 假定第j次鱼的总数为X,则第j次留下: x-(x+1)/(j+1) 当第四次出售完毕时,应该剩下11条。若X满足上述要求,则X就是题目的解。 应当注意的是:\应满足整除条件。试探X的初值可以从23开始,试探的步长为2,因为X的值一定为奇数。 *程序说明与注释 #include
26
if(a==0||c==0) {printf(\分母为0输入错误!\ if(op==\\'+\\'){y=b*c+d*a;x=a*c;} /*运算结果均为y/x*/ if(op==\\'-\\'){y=b*c-d*a,x=a*c;} if(op==\\'*\\'){y=b*d;x=a*c;} if(op==\\'/\\'){y=b/c;x=a/d;} z=x; if(x>y) z=y; i=z; while(i>1) /*y/x分子分母约去公因数*/ { if(x%i==0&&y%i==0){x=x/i;y=y/i;continue;} i--; } printf(\} -------------------------------------------------------------------------------- -- 作者:huang01 -- 发布时间:2004-10-21 17:02:30 -- 17. 17.平分七筐鱼 甲、乙、丙三位鱼夫出海打鱼,他们随船带了21只箩筐。当晚返航时,他们发现有七筐装满了鱼,还有七筐装了半筐鱼,另外七筐则是空的,由于他们没有秤,只好通过目测认为七个满筐鱼的重量是相等的,7个半筐鱼的重量是相等的。在不将鱼倒出来的前提下,怎样将鱼和筐平分为三份? *问题分析与算法设计 根据题意可以知道:每个人应分得七个箩筐,其中有3.5筐鱼。采用一个3*3的数组a来表示三个人分到的东西。其中每个人对应数组a的一行,数组的第0列放分到的鱼的整筐数,数组的第1列放分到的半筐数,数组的第2列放分到的空筐数。由题目可以推出: 。数组的每行或每列的元素之和都为7; 。对数组的行来说,满筐数加半筐数=3.5; 。每个人所得的满筐数不能超过3筐; 。每个人都必须至少有1 个半筐,且半筐数一定为奇数 对于找到的某种分鱼方案,三个人谁拿哪一份都是相同的,为了避免出现重复的分配方案,可以规定:第二个人的满筐数等于第一个人的满筐数;第二个人的半筐数大于等于第一个人的半筐数。 *程序与程序注释 #include
27
{ a[1][1]=m; a[2][1]=7-k-m; for(flag=1,n=0;flag&&n<3;n++) /*判断每个人分到的鱼是 3.5筐,flag为满足题意的标记变量*/ if(a[n][0]+a[n][1]<7&&a[n][0]*2+a[n][1]==7) a[n][2]=7-a[n][0]-a[n][1]; /*计算应得到的空筐数量*/ else flag=0; /*不符合题意则置标记为0*/ if(flag) { printf(\ Full basket Semi--basket Empty\\\\n\ for(n=0;n<3;n++) printf(\ fisher %c: %d %d %d\\\\n\ \\'A\\'+n,a[n][0],a[n][1],a[n][2]); } } } } } } * 运行结果 It exists possible distribution plans: No.1 Full basket Semi--basket Empty fisher A: 1 5 1 fisher B: 3 1 3 fisher C: 3 1 3 No.2 Full basket Semi--basket Empty fisher A: 2 3 2 fisher B: 2 3 2 fisher C: 3 1 3 *思考题 晏会上数学家出了一道难题:假定桌子上有三瓶啤酒,癣瓶子中的酒分给几个人喝,但喝各瓶酒的人数是不一样的。不过其中有一个人喝了每一瓶中的酒,且加起来刚好是一瓶,请问喝这三瓶酒的各有多少人? (答案:喝三瓶酒的人数分别是2人、3人和6人) 18. 18.有限5位数 个位数为6且能被3整除的五位数共有多少? *题目分析与算法设计 根据题意可知,满足条件的五位数的选择范围是10006、10016。。。99996。可设基础数i=1000,通过计算i*10+6即可得到欲选的数(i的变化范围是1000~999),再判断该数能否被3整除。 *程序说明与注释 #include
28
求100到1000之间有多少个其数字之和为5的整数。 (答案:104,113,122,131,140,203,212,221,230,302,311,320,401,410,500) 19. 19. 8 除不尽的数 一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。 *题目分析与算法设计 根据题意,可设最后的商为i(i从0开始取值),用逆推法可以列出关系式: (((i*8+7)*8)+1)*8+1=((2*i*17)+15)*18+4 再用试探法求出商i的值。 *程序说明与注释 #include
29
21. 21.4位反序数 设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过来形成的整数。例如:1234的反序数是4321。 *题目分析与算法设计 可设整数N的千、百、十、个位为i、j、k、l,其取值均为0~9,则满足关系式: (i*103+j*102+10*k+l)*9=(l*103+k*102+10*j+i) 的i、j、k、l即构成N。 *程序说明与注释 #include
30