Problema de la moneda de oro

Descripción del Título

* 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;依次类推。。当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。

输入样例:输入 6    输出   14
                                    输入  1000     输出   29820
骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3=14枚金币。

Implementación de código C ++

  • Calcule los salarios diarios y acumule
    
    #include <iostream>
    using namespace std;

int main ()
{
int data; // días
cin >> data;
int tmp = 1; // salario por día
int sum = 0; // salario total
para (int i = 0, j = 0; i <data; i ++)
{
sum + = tmp;
j ++;
if (j> = tmp) {// Aumentar el salario
tmp ++;
j = 0;
}
}
cout << sum << endl;

system("pause");
return 0;

}

* 转换思路:假设连续N天的 N个金币  全部发给骑士,当计算的日期超过实际日期时,减去未发的金币。代码实现如下:

#include <iostream>
usando el espacio de nombres std;

int main ()
{
int data; // días reales
cin >> data;
int tmp = 1; // salario diario
int sum = 0; // salario total

int t = 0;

while (t < data)    //t>=data停止
{   
    sum += tmp*tmp; //假设全发给骑士
    t += tmp;       //天数
    tmp++;      
}
//注意此时每天的工资是 tmp-1
sum -= (t - data)*(tmp-1);      //实际应发的工资

cout << sum << endl;

system("pause");
return 0;

}

Supongo que te gusta

Origin blog.51cto.com/15080913/2674670
Recomendado
Clasificación