一共有4张2元,3张3元,2张5元,一共能凑出多少种不同的钱数,不包括0元,并且三张2元和2张3元钱数一样。
import java.util.HashSet;
public class 不同的钱数 {
public static void main(String[] args) {
// TODO Auto-generated method stub
HashSet<Integer> hashSet = new HashSet<>();
int a[] = {4,3,2};
for (a[0] = 0; a[0] < 5; a[0]++) {
for (a[1] = 0; a[1] < 4; a[1]++) {
for (a[2] = 0; a[2] < 3; a[2]++) {
if (a[0]==0&&a[1]==0&&a[2]==0) {
continue;//不包括0元
}
int money = a[0]*2+a[1]*3+a[2]*5;
if (!hashSet.contains(money)) {//用hashset的判断重复功能;
hashSet.add(money);
}
}
}
}
System.out.println(hashSet.size());
}
}
这道题 三种钱,遍历完3种钱,有多少可能?
import java.util.HashSet;
public class 不同的钱数2 {
static int a[][]= {{4,2},{3,3},{2,5}};
static HashSet<Integer> hashSet = new HashSet<>();
public static void main(String[] args) {
// TODO Auto-generated method stub
dfs(0,0);
System.out.println(hashSet.size());
}
private static void dfs(int num,int summoney) {
// TODO Auto-generated method stub
if (num==3) {
if (summoney==0) {
return;
}
if (!hashSet.contains(summoney)) {
hashSet.add(summoney);
}
return;
}
for (int i = 0; i <= a[num][0]; i++) {
summoney += a[num][1]*i;
num++;
dfs(num, summoney);
num--;
summoney -= a[num][1]*i;
}
}
}
题目二:
蓝桥杯--抽签
X星球要派出一个5人组成的观察团前往W星。
其中:{4,2,2,1,1,3};
A国最多可以派出4人。
B国最多可以派出2人。
C国最多可以派出2人。
....
那么最终派往W星的观察团会有多少种国别的不同组合呢?
public class 抽签 {
private static int count;
static int a[] = {4,2,2,1,1,3};
public static void main(String[] args) {
// TODO Auto-generated method stub
dfs(0,5);
System.out.println(count);
}
private static void dfs(int num, int peoplenum) {
// TODO Auto-generated method stub
if (num==6) {
if (peoplenum==0) {
count++;
}
return;
}
for (int i = 0; i <= a[num]; i++) {
if (peoplenum-i<0) {
continue;
}
peoplenum -= i;
num++;
dfs(num, peoplenum);
num--;
peoplenum += i;
}
}
}