思路:先写一个for循环让i从1自增到n,再从for循环里写一个if判断语句,如果i能被k整除则求和,并定义一个数自加来记录A类数的个数,方便随后求平均值,B类数同前面处理。
import java.util.Scanner;
public class luoGuPractice1 {
public static void main(String[] args) {
int a=0,b=0,sumA=0,sumB=0;
Scanner sc=new Scanner(System.in);
System.out.println("请输入小于等于10000且大于等于1的整数n");
int n = sc.nextInt();
System.out.println("请输入小于等于100且大于等于1的整数k");
int k = sc.nextInt();
for(int i=1;i<=n;i++) {
if(i%k==0) {
sumA+=i;
a++;
}else {
sumB+=i;
b++;
}
}
double avgA=sumA/a;
double avgB=sumB/b;
System.out.println("能被k整除的数的和为"+sumA);
System.out.println("不能被k整除的数的和为"+sumB);
System.out.println("A类数的平均值为"+avgA);
System.out.println("B类数的平均值为"+avgB);
}
}
思路:第一个阶段共1*1=1个金币,第二阶段共2*2=4个金币,第三个阶段共3*3=9个金币......以此类推,而我的做法是判断在k天里一共有几个阶段,再求这些阶段的平方和就是骑士的工资,但如果最后一个阶段不是完整的阶段该怎么办呢,这时候第二个if判断就很关键了,第一个判断先求得前面完整阶段的平方和,并求得剩余天数,然后用第二个判断的条件(求和小于等于天数k,加上i+1大于等于天数k)求得此时的阶段数i+1,再用剩余天数乘i+1,加上之前求得的工资就是骑士k天总共的的工资。
import java.util.Scanner;
public class luoGuPractice2 {
public static void main(String[] args) {
int sum=0,a=0,end=0,pay=0;
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.println("请输入天数k");
int k = sc.nextInt();
for(int i=1;i<=k;i++) {
sum+=i;
if(sum<=k) {
pay+=i*i;
a=k-sum;
}
if(sum<k&&(sum+(i+1))>k) {
end=a*(i+1);
pay+=end;
}
}
System.out.println("骑士的工资为"+pay);}
}
如果学长学姐们有更好的方法可以分享一下。