BC96. [NOIP2015]金币
描述
输入描述
输入只有1行,包含一个正整数K,表示发放金币的天数。输出描述
输出只有1行,包含一个正整数,即骑士收到的金币数。示例1
输入:
6
输出:
14
说明:
骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。示例2
输入:
1000
输出:
29820
C 解法, 执行用时: 2ms, 内存消耗: 284KB, 提交时间: 2022-05-31
#include<stdio.h> int main() { int n=0;//发放金币天数 int a=0; int sum=0;//收到金币数 scanf("%d",&n); int i=0; for(i=0;;i++) { int j=0; for(j=1;j<=i;j++) { sum+=i; a++; if(a==n) break; } if(a==n) break; } printf("%d\n",sum); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 292KB, 提交时间: 2022-05-23
#include<stdio.h> int main() { // 1 2 2 3 3 3 int d; scanf("%d",&d); int m=1; int sum=0; int sum_day=0; while(1) { for(int i=1;i<=m;i++) { sum+=m; sum_day++; if(sum_day==d) {break;} } if(sum_day==d) {break;} m++; } printf("%d",sum); }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-08-01
#include<stdio.h> int main() { int x,day=1,sum=0;//day为当前天数,注意day开始是1;sum为此时的金币数 scanf("%d",&x); for(int i=1;i<=x;i++) { if(day+i<=x) //这一组是不是在x之前 { day+=i; //这一组结束 sum+=i*i; } else { sum+=(x-day+1)*i; //用x-day+1算出剩余的天数 break; } } printf("%d",sum); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-05-13
#include<stdio.h> int main(){ int day=0; int sum=0; scanf("%d",&day); int count =0; for(int i=1;i<=day;i++) { for(int j=0;j<i;j++){ sum+=i; count++; if(count==day){ goto here; } } } here: printf("%d",sum); return 0; }
C 解法, 执行用时: 2ms, 内存消耗: 296KB, 提交时间: 2022-03-13
#include<stdio.h> int main() { int a,i,j,b=0,sum=0; scanf("%d",&a); for(i=1;b<a;i++) //收到i金币 { for(j=1;j<=i && b<a;j++) //收到i金币的j天 { sum=sum+i; b++; } } printf("%d",sum); }