Práctica diaria de lenguaje C
12 de marzo de 2022
Directorio de artículos
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 x
peces vendidos es i
(a partir de 1); según el título, se puede obtener la siguiente fórmula:
cual es
Este es un polinomio, y x
se 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 x
valor).
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
referencia en línea
Enlace original: http://c.biancheng.net/cpp/html/3317.html
Parte original de la idea (parte de optimización)
#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;
}