唐钰小宝w 2021-06-29 21:03 采纳率: 0%
浏览 19

Java面试题(1-9999999)

  1. 编写一个程序,由键盘输入n的值,求s=1+(1+4)+(1+4+7)+...+(1+4+7+...+n)的值

(透过现象看本质)分析与求3!+5!+7!+9!相同

1+4--s=s+4

1+4+7----s=s+7

1+4+7+10-----s=s+10

假设:

int s=0;//最终结果

int r=0;//保存每个括号里面的和

for(int i=1;i<=n;i+=3){

         r+=i;

         s+=r;

}

n=12,11

if((n-1)%3!=0){

         s += r+n;

}           

如n=4、n=7;n=12

         i        r        s       n

         1       0       0               

                   1       1

         4       5       6

         7       12     18

         11     23     41

代码如下:

public static void main(String[] args){

      Scanner s = new Scanner(System.in);

      System.out.println("请输入数值n");

      int n = s.nextInt();

      int s=0;

      int sum = 0;

      for(int i=1;i<=n;i+=3){

         sum +=i;

         s+=sum;

      }

      if((n-1)%3!=0){

         s = s+sum+n;

      }

      System.out.println(s);

   }

  • 写回答

1条回答 默认 最新

  • 攸攸太上 2024-09-17 07:24
    关注

    1、如果用double存储最终的值更不容易出错
    2、我的思路是将 n - 1 / 3 的值算出来,作为次数
    然后在根据次数设置双层循环
    3、双层循环

    for(int i = 0; i < 次数; i++){
          for(int j = 0; j <= i; j++){
                sum += j * 3 + 1;
          }
          s += sum;
          sum = 0;
    }
    

    4、如上代码更符合我个人的逻辑

    评论 编辑记录

报告相同问题?