您当前的位置:首页 > 计算机 > 编程开发 > C语言

C语言出售金鱼问题

时间:12-29来源:作者:点击数:

问题描述

小明将养的一缸金鱼分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 必然能够整除 y+1。

x 的取值可以从 23 开始试探,由于 x 值必为奇数,因此步长取 2。

算法设计

循环结构计算 x 可取的值,直到运行第 5 次并且 x=11 时停止,输出没有卖鱼时金鱼总数。

下面是完整的代码:

#include<stdio.h>
int main()
{
    int i, j, x, flag=0;  /*flag作为控制标志*/
    /*从23开始试探,步长为2*/
    for( i=23; flag==0; i+=2 )
    {
        for( j=1,x=i; j<=4&&x>=11; j++ )
            if( (x+1) % (j+1) == 0)  /*判断x+1是否能整除j+1*/
                x -= (x+1) / (j+1);
            else
            {
                x=0;
                break;
            }
        if(j==5 && x==11)
        {
            printf("原来鱼缸中共有%d条金鱼。\n", i);
            flag = 1;  /*求出结果,flag置1,退出试探*/
        }
    }
   
    return 0;
}

运行结果:原来鱼缸中共有59条金鱼。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门