国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续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。
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 <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 <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; /* 类比数学问题: 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; }
#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 <iostream> using namespace std; int main() { int n; cin >> n; int sum = 0; //gold表示当天应该收到的金币,date表示当前轮次还剩几天 int gold = 1, date = 1; for (int i = 1; i < n + 1; i++) { //如果当前轮次结束,进入下一轮,此轮应该收到的金币+1,此轮的天数跟应收金币数相同 if (date == 0) { gold++; date = gold; } //当前轮次所剩天数减一 date--; //将当天收到的金币累加到总和 sum = sum + gold; } cout << sum << endl; }
#include <stdio.h> int main() { int i = 0,n = 0,sum = 0,sum0 = 0; while(scanf("%d",&n) != EOF) { for (i = 1;i <= n; i++) { sum += i; sum0 += i * i; if (sum == n) { break; } else if(sum > n) { int temp = n - (sum - i);//此行必须定义于此!!! sum0 -= i * i; //我们不需要加上此时的i * i! sum0 += temp * i;//我们要加上的是temp * i! break; } } printf("%d",sum0); } return 0; }
#include <stdio.h> int main() { int k=1,sum=0; scanf("%d",&k); int i=1; int count=0; while((k-count)>=i){ sum+=i*i; count+=i; i++; } if(count!=k){ sum+=i*(k-count); } printf("%d",sum); }