出售金鱼
一、问题描述
小明将养的一缸金鱼分5次出售:第1次卖出全部的一半加1/2条;第2次卖出余下的三分之一加1/3条;第3次卖出余下的四分之一加1/4条;第4次卖出余下的五分之一加1/5条;最后卖出余下的11条。试编程求出原来鱼缸中共有多少条鱼。
二、问题分析
依题意可知,金鱼是分5次出售的,每次卖出的方式都相同,因此可以用表达式将每次卖鱼后剩下的条数计算出来。
由:
第1次卖出全部的一半加1/2条;
第2次卖出余下的三分之一加1/3条;
第3次卖出余下的四分之一加1/4条;
第4次卖出余下的五分之一加1/5条;
可推出:
第j次卖出余下的(j+1)分之一加1/(j+1)条。
假设第j次卖鱼前金鱼总数为x,则第j次卖鱼后鱼缸中还剩下金鱼的条数为:
x- ( x+1 ) / ( j+1)
又由于“最后卖出余下的11条”,因此第4次卖鱼后鱼缸中剩下的金鱼条数为11条。因为金鱼只能整条进行出售,因此x+1必然能够整除j+1。
可以从23开始试探x的取值,由于x值必为奇数,因此步长取2。
三、程序流程图
四、代码实现
#include<stdio.h> int main() { int i,j,x,flag=0; for(i=23;flag==0;i+=2) { for(j=1,x=i;j<=4&&x>=11;j++) if((x+1)%(j+1)==0) x-=(x+1)/(j+1); else { x=0; break; } if(j==5&&x==11) { printf("原来鱼缸中共有%d条金鱼。\n",i); flag=1; } } }