国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
输入只有1行,包含一个正整数K,表示发放金币的天数。
输出只有1行,包含一个正整数,即骑士收到的金币数。
6
14
骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。
1000
29820
对于100%的数据,1 ≤ K ≤ 10,000。
#include <stdio.h>
int main() {
//当前天数、总天数
int nday = 1, aday = 0;
//总工资
int sum = 0;
//每天的工资
int x = 1;
//与工资对应的次数
int y = 0;
scanf("%d", &aday);
while (nday <= aday) {
sum = sum + x;
y++;
//完成一轮与工资对应的相加次数递增
if (x == y) {
x++;
y = 0;
}
//天数递增
nday++;
}
printf("%d", sum);
return 0;
} #include <stdio.h>
int main()
{
long int day = 0, sum = 0;
int count = 0,i = 0;
scanf("%ld", &day);
for (i = 1; i <= day; i++)
{
int j = 0;
for (j = 0; j < i; j++)
{
sum += i;
count++;
if (day == count)
break;
}
if (day == count)
break;
}
printf("%ld", sum);
return 0;
} #include <iostream>
using namespace std;
int main()
{
int date, sum = 0, count = 1, day = 1;
cin >> date;
for(int i = 1; i <= date; i++)
{
sum += day;
if(i == count)
{
day ++;
count += day;
}
}
cout << sum;
return 0;
}
#include<iostream>
using namespace std;
/*
类比数学问题:
sum = 1*1 + 2*2 + 3*3 + ... + n*n (k>=n);
sum = 1*1 + 2*2 + 3*3 + ... + k*n (k<n);
*/
int main() {
int k,result=0;
cin>>k;
for(int i=1;k>0;i++)
{
if(k>=i) result+=i*i;
else result+=i*k;
k-=i;
}
cout<<result<<endl;
return 0;
}
import java.util.*;
public class Main{
public static int getcoin(int n) {
int cion=0,num=0;
for(int i=1;num<n;i++){
for(int j=1;j<=i&&num<n;j++){
cion+=i;
num++;
}
}
return cion;
}
public static void main(String love[]){
Scanner input=new Scanner(System.in);
int n=input.nextInt();
System.out.print(getcoin(n));
input.close();
}
} #include<stdio.h>
/*
类比数学问题:
sum = 1*1 + 2*2 + 3*3 + ... + n*n (k>=n);
sum = 1*1 + 2*2 + 3*3 + ... + k*n (k<n);
*/
int main()
{
int k;
int i = 1;
int result = 0;
scanf("%d", &k);
while(k>0)
{
if(k >= i)
result += i*i;
else
result += k*i;
k -= i;
i++;
}
printf("%d\n", result);
return 0;
} #include <stdio.h>
int main() {
int k;
int i, days = 1, n = 1, cnt = 0, money = 0;
scanf("%d", &k);
for (i=1; i<=k; i++)
{
if (i <= days) //i为第几天,days为天数
{
money = money + n; //money为金币数量
cnt ++; //cnt控制n的增加
}
if (cnt == n) //n为其后n天
{
n ++;
cnt = 0;
days = days + n;
}
}
printf("%d\n", money);
return 0;
} 自己想了好久,不知道写的咋样,好在通过了