我做了一个练习,将某些数字提升到给定的幂。正是我遇到的问题:
我们使用整数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
//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();
}
}
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();
}
这几乎肯定与输出中的尾随空间有关:
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指