/** * 题目名称:金币 <p> * 题目来源:http://noi.openjudge.cn/ch0105/45/ <p> * 程序功能:输出骑士在指定天数内获得的金币总数 * * @author 潘磊,just_panlei@just.edu.cn * @version 1.0 */importjava.util.Scanner;publicclassMain{/** * 返回骑士在指定天数内获得的金币总数。 * * @param days 指定天数。 * @return 骑士在days天内获得的金币总数。 */publicintgetGoldCoins(intdays){intans=0;// 骑士在days天内获得的金币总数intperiod=1;// 发放金币的周期LOOP:while(true){/* 依次遍历当前发放金币周期的每一天 */for(inti=1;i<=period;i++){if(days==0){// 如果天数为0breakLOOP;// 跳出LOOP块}ans+=period;// 累加当天获得的金币数days--;// 天数减少一天}period++;// 进入下一个发放金币的周期}returnans;}publicstaticvoidmain(String[]args){Maincall=newMain();Scannerinput=newScanner(System.in);intdays=input.nextInt();System.out.print(call.getGoldCoins(days));}}/** * 题目名称:金币 <p> * 题目来源:http://noi.openjudge.cn/ch0105/45/ <p> * 程序功能:输出骑士在指定天数内获得的金币总数 * * @author 潘磊,just_panlei@just.edu.cn * @version 1.1 */importjava.util.Scanner;publicclassMain{/** * 返回骑士在指定天数内获得的金币总数。 * * @param days 指定天数。 * @return 骑士在days天内获得的金币总数。 */publicintgetGoldCoins(intdays){intans=0;// 骑士在days天内获得的金币总数// 发放金币的周期,初始为第一个周期(第k个周期包含k天,可获得k*k个金币)intperiod=1;/* 在剩余天数不少于当前发放金币周期所含天数时 */while(days>=period){ans+=period*period;// 累加当前周期获得的金币数days-=period;// 更新剩余的天数period++;// 进入下一个发放金币周期}ans+=days*period;// 累加剩余天数还能继续发放的金币数量returnans;}publicstaticvoidmain(String[]args){Maincall=newMain();Scannerinput=newScanner(System.in);intdays=input.nextInt();System.out.print(call.getGoldCoins(days));}}