当前位置: 首页 > 知识库问答 >
问题:

java中的exercise带来意外结果

庞修贤
2023-03-14

我做了一个练习,将某些数字提升到给定的幂。正是我遇到的问题:
我们使用整数a、b和n来创建以下序列:

 (a + 2^0 * b), (a + 2^0 * b + 2^1 * b), ... ,(a + 2^0 * b + 2^1 * b + ... + 2^n-1 * b)

将以a、b和n的形式为您提供q查询。对于每个查询,将与给定a、b和n值对应的序列打印为一行由n个空格分隔的整数。

输入格式
第一行包含一个整数q,表示查询的数量。q后续行的每一行i都包含三个空格分隔的整数,描述该查询的相应ai、bi和ni值。

输出格式
对于每个查询,在新行上打印相应的序列。每个系列必须按顺序打印为一行n个空格分隔的整数。

我尝试了这段代码:

import java.util.*;
import java.lang.Math.*;

class Playground {
    public static void main(String[ ] args) {
        Scanner in = new Scanner(System.in);

        int q = in.nextInt();

        for(int i = 0; i < q; i++) {
            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            int num = a;
            for(int j = 0; j < n; j++) {
                num += (((int) Math.pow(2, j)) * b);
                System.out.print(num + " ");
            }

            System.out.println();
        }


    }
}

但它没有通过测试,尽管“预期输出”和实际输出看起来是一样的。我试着寻找其他的解决方案,但我找到的和我自己的没有太大区别。

输入

2
0 2 10
5 3 5

预期产量

2 6 14 30 62 126 254 510 1022 2046
8 14 26 50 98

输出量

2 6 14 30 62 126 254 510 1022 2046
8 14 26 50 98

共有3个答案

郑理
2023-03-14
//where 2^0*b, 2^0*b + 2^1*b, 2^0*b + 2^1*b + 2^2*b .....,2^(k+1) - 1


import java.util.*;
import java.io.*;
import java.lang.Math;

class Solution{
    public static void main(String []argh){
        Scanner in = new Scanner(System.in);
        int t=in.nextInt();
        for(int i=0;i<t;i++){

            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            int count = 0;
            for(int j=0;j<n;j++) {

                    System.out.print((int)(a+b*(Math.pow(2,j + 1)-1))+" ");
            }
            System.out.println();
        }
        in.close();
    }
}
东方修谨
2023-03-14
public static void main(String []argh){
        Scanner in = new Scanner(System.in);
        int t=in.nextInt();
        for(int i=0;i<t;i++){
            int a = in.nextInt();
            int b = in.nextInt();
            int n = in.nextInt();
            int power = 1,sum=0;
            for(int j=0;j < n;j++)
            {
                sum=a+(power*b);
                System.out.print(sum+" ");
                power = power * 2;
                power++;  
            }
            System.out.println("");
        }
        in.close();
    }
濮阳
2023-03-14

这几乎肯定与输出中的尾随空间有关:

2 6 14 30 62 126 254 510 1022 2046 | <<= Trailing space
8 14 26 50 98 | <<= Trailing space

修复您的输出如下:

for(int j = 0; j < n; j++) {
    if (j != 0) {
        System.out.print" ");
    }
    num += (((int) Math.pow(2, j)) * b);
    System.out.print(num);
}

请注意,您可以避免调用Math。因为2的幂可以用移位表达式1来计算

for(int j = 0; j < n; j++) {
    if (j != 0) {
        System.out.print" ");
    }
    num += (b << j);
    System.out.print(num);
}

 类似资料:
  • 我有以下代码: 为什么它会打印Java流?

  • 我有以下代码,它将标记字符串以创建对象列表: 我预期的输出是 1#、#Jon#、#176 2#、#Jack#、#200 3#、#Jimmy#、#160 如果我把内部分界线更改为类似的东西,它会正常工作为什么会发生这种行为?

  • 问题内容: 我正在使用NumPy在Python中使用标准方法创建对称矩阵/数组: 现在让我们变得聪明: 等一下 左上和右下部分是对称的。如果我选择了较小的阵列怎么办? 好.... 只是要确保… 这是一个错误,还是我要学习一些有关NumPy数组的疯狂知识? 问题答案: 该操作返回该数组的 视图 ,这意味着未分配新数组。反过来,这意味着您正在同时读取和修改阵列。很难说出为什么某些大小或结果区域起作用的

  • 问题内容: 我创建了一个小测试应用程序来跟踪我在Heroku上使用Postgres遇到的问题:http : //snippi.com/s/xd511rf 正如您在第 49 行中看到的那样,我想检索 今天 创建的所有条目。这将是我使用Ruby Gem DataMapper进行的 测试数据的前两项。 当我在笔记本电脑(Ubuntu 12.10,HP,Ruby 1.9.3)上运行此应用程序时,一切都会得

  • 问题内容: 给定以下示例: 输出为: 为什么? 问题答案: 这是因为前导零的整数文字是八进制整数(以8为底):

  • 问题内容: 我正在尝试使用Java的SimpleDateFormat来解析带有以下代码的日期字符串。 我期待一些解析错误。但有趣的是,它打印以下字符串。 无法推理出来。有人可以帮忙吗? 谢谢 问题答案: 已将其解析为 月份 号2011,因为month()是日期模式的第一部分。 如果将2011个月加到28年,则得到195年。 2011个月是167年零7个月。七月是第七个月。您将02指定为日,将28指