【HackerRank】Manasa and Stones
Change language :
Manasa 和 她的朋友出去徒步旅行。她发现一条小河里边顺序排列着带有数值的石头。她开始沿河而走,发现相邻两个石头上的数值增加 a 或者 b. 这条小河的尽头有一个宝藏,如果Manasa能够猜出来最后一颗石头上的数值,那么宝藏就是她的。假设第一个石头的上数值为0,找出最后一个石头的可能的所有数值。
输入格式
第一行包含整数 T, 代表测试数据的组数。
每组数组包含三行:
第一行包含 n,代表石头的个数
第二行包含 a
第三行包含 b
输出格式 升序输出最后一颗石头上所有可能的数值, 用空格隔开。
取值范围
1 ≤ T ≤ 10
1 ≤ n, a, b ≤ 103
题解:
对于第二个石头,可能的取值是0*a+b或者a+0*b;
对于第三个石头,可能的取值是0*a+2*b,1*a+1*b,2*a+0*b;
.....
对于第n个石头,可能的取值是0*a+(n-1)*b,1*a+(n-2)*b,......,(n-1)*a+0*b;
所以只要枚举a和b的系数就可以算出所有的可能了。
另外,java中的hashset是无需的,treeset是有序的。
代码如下:
1 import java.io.*; 2 import java.util.*; 3 4 5 public class Solution { 6 7 public static void main(String[] args) { 8 Scanner in = new Scanner(System.in); 9 int t = in.nextInt(); 10 for(int i = 0; i < t; i++){ 11 Set<Long> answer= ManasaandStones(in.nextLong(), in.nextLong(), in.nextLong()); 12 Iterator<Long> iterator = answer.iterator(); 13 while(iterator.hasNext()){ 14 System.out.printf("%d ",iterator.next()); 15 } 16 System.out.println(); 17 } 18 } 19 20 private static Set<Long> ManasaandStones(long n, long a, long b){ 21 22 //Write code to solve each of the test over here 23 if(a > b){ 24 long temp = b; 25 b = a; 26 a = temp; 27 } 28 Set<Long> hs = new TreeSet<Long>(); 29 for(int i = 0;i <= n-1;i++){ 30 hs.add(i*b+(n-1-i)*a); 31 } 32 return hs; 33 } 34 35 36 }
分类:
HackerRank
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了