Práctica diaria del lenguaje C - Día 86: El problema de vender peces de colores

Práctica diaria de lenguaje C
12 de marzo de 2022

Tema Descripción

Xiao Ming venderá un tanque de peces dorados 5 veces: la primera vez vende la mitad de todos los peces dorados más 1/2; la segunda vez vende el tercio restante más 1/3; la tercera vez vende los peces dorados restantes A cuarto más 1/4; la cuarta venta del quinto restante más 1/5; la venta final de los 11 restantes. Intente programar para averiguar cuántos peces hay en la pecera original.

análisis del problema

Suponiendo que el número actual de peces de colores es y, el número de peces de colores antes de la última venta de peces es y el número de xpeces vendidos es i(a partir de 1); según el título, se puede obtener la siguiente fórmula:

inserte la descripción de la imagen aquí
cual es
inserte la descripción de la imagen aquí

Este es un polinomio, y xse necesita encontrar el valor inicial, de modo que cuando la fórmula se opere por cuarta vez y=11, en programación, podemos usar el método exhaustivo para enumerar exhaustivamente el primer xvalor).

Código

#include <stdio.h>

int main()
{
    
    
    int sum = 0; //总金鱼数
    int i = 0;
    int flag = 0;
    double tmp = 0;

    for(sum = 11; sum <= 1000; sum++) //穷举范围11~1000
    {
    
    
        tmp = (double)sum;
        for(i = 1; i <= 4; i++)
        {
    
    
            tmp = tmp - (tmp + 1) / (i + 1);
        }
        if(tmp < 11.000001 && tmp > 10.999999) //最后剩下11条(浮点数判断需要考虑精度问题)
        {
    
    
            flag = 1;   //找到匹配的结果
            break;
        }
    }
    if(flag)
        printf("金鱼总数为%d\n", sum);
    else
        printf("error\n");
    return 0;
}

resultado de la operación

inserte la descripción de la imagen aquí

referencia en línea

Enlace original: http://c.biancheng.net/cpp/html/3317.html

Parte original de la idea (parte de optimización)
inserte la descripción de la imagen aquí

#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;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_43772810/article/details/123438012
Recomendado
Clasificación