一道编程题求大佬帮忙:游戏仓库中有n块宝石, 每块宝石有两个属性: 速度和力量,携带这些宝石会获得相应的属性

weixin_43982915 2020-10-24 09:23:06
游戏仓库中有n块宝石, 每块宝石有两个属性: 速度和力量
携带这些宝石会获得相应的属性
其中, 总的速度值为所有宝石的速度之积
总的力量为所有宝石的力量之和
想知道如何选取宝石(不能一块都不选)使得总速度值和总力量值相差最少.
输入:
第一行, 整数n, 表示有n块宝石(1<=n<=10)
j截下来n行, 每行两个整数, 分别表示每块宝石的速度和力量值
(数据保证, 所有速度值的积和所有力量值的和 都在int范围内)
输出格式:
一个整数, 表示总速度值和总力量值的最小差值
样例输入:
4
1 7
2 6
3 8
4 9
样例输出:
1
...全文
1739 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
qybao 2020-10-24
  • 打赏
  • 举报
回复
求宝石的所有组合,从中找出最小差的组合
public class Sample {
static class Stone {
int speed;
int power;
public Stone(int speed, int power) {
this.speed = speed;
this.power = power;
}
public String toString() {
return String.format("{speed: %s, power: %s}", speed, power);
}
}
public static void main(String[] args) {
try {
int n, s, p, ss, sp, sub, min=Integer.MAX_VALUE;
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
List<Stone> list = new ArrayList<>();
for (int i=0; i<n; i++) {
s = sc.nextInt();
p = sc.nextInt();
list.add(new Stone(s, p));
}
List<Stone> minList = null;
for (int i=0; i<n; i++) { //求出各种组合
for (List<Stone> lst : combile(list, i+1)) { //遍历每种组合
ss = 1;
sp = 0;
for (Stone st : lst) { //计算总速度和总能力
ss *= st.speed;
sp += st.power;
sub = Math.abs(ss-sp);
if (sub < min) {
min = sub;
minList = lst;
}
}
}
}
System.out.println(min);
//System.out.println(minList); //查看组合情况
} catch (Throwable e) {
e.printStackTrace();
}
}

public static <T> List<List<T>> combile(List<T> list, int n) { //组合
List<List<T>> result = new ArrayList<>();
int[] idx = new int[n];
Arrays.fill(idx, 0);
while (idx[0]<n) {
boolean ok = true;
for (int i=0; ok&&i<n-1; i++) {
for (int j=i+1; j<n; j++) {
if (idx[i]==idx[j]) {
ok = false;
break;
}
}
}
if (ok) {
List<T> tmp = new ArrayList<>();
for (int i=0; i<n; i++) {
tmp.add(list.get(idx[i]));
}
result.add(tmp);
}
idx[n-1]++;
for (int i=n-1; i>0; i--) {
if (idx[i]==list.size()) {
idx[i] = 0;
idx[i-1]++;
}
}
}
return result;
}
}

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧