奇妙的算法【9】每个小孩的糖果数,找公约数,最少硬币数
2020-12-13 13:45
标签:解决问题 调用 使用 lin for imp else substring 排序 有p个小孩,c个糖果,刚开始第1个小孩发一个糖果,第2个小孩发两个糖果,第p个小孩发p个糖果,如果糖果没有发完,就接着【注意】第1个小孩发p+1个糖果.....第p个小孩发2*p个糖果,如果糖果还没有发完,就继续下一轮,第1个小孩发2*p+1个糖果,... 方法一,遍历【这种方法太low了就折叠一下】 ){
if(preNumc){
pGet[i]+=preNum;
c-=preNum;
preNum++;
}else {
pGet[i]+=c;
return pGet;
}
}
}
return null;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int c=Integer.valueOf(sc.next());
int p=Integer.valueOf(sc.next());
int[] pGet=getCandies(c,p);
System.out.print("[");
for(int i=0;i 方法二,数学推导【算法复杂度急速降低】除了,推理的时候复杂一些,其他都还好 方法一:使用HashSet和TreeSet解决问题,但是只AC60%!!!可能是耗时太多【时间复杂度大】理解简单易懂 方法二:直接使用遍历进行,省略了计算hash值以及进行查找的费时操作【算法复杂度降低并且拥有两个光标进行判断】 例如:有1,2,5面值的硬币,请问11元钱最少多少硬币可以凑成,如果无法凑成直接输出-1【之前AC80%原因找到了,是输出-1这个没有安排上】 奇妙的算法【9】每个小孩的糖果数,找公约数,最少硬币数 标签:解决问题 调用 使用 lin for imp else substring 排序 原文地址:https://www.cnblogs.com/Mufasa/p/11537429.html1,每个小孩的糖果数量是多少
package com.cnblogs.mufasa.Main1;
import java.util.Scanner;
public class Main {
public static int[] getCandies(int c,int p){
int[] pGet=new int[p];
int preNum=1;
while (c!=0){
for(int i=0;i
package com.cnblogs.mufasa.Main1;
import java.util.Scanner;
public class Main1 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// int c = Integer.valueOf(sc.next());
// int p = Integer.valueOf(sc.next());
//0,测试
int c=45,p=4;
int lineSum=(1+p)*p/2;//1+2+3+...+p的总数
int leve=0,preCan=c;
//1,1先判断出是在第几层中断【正确】
while (true){
if(preCan
2,找两个数组公有的数
package com.cnblogs.mufasa.Main2;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Scanner;
import java.util.TreeSet;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str0=sc.next();
String str1=sc.next();
String[] strs0=str0.substring(1,str0.length()-1).split(",");
String[] strs1=str1.substring(1,str1.length()-1).split(",");
if(str0.length()str1.length()){
String[] temp=strs0;
strs0=strs1;
strs1=temp;
}
HashSet
package com.cnblogs.mufasa.Main2_1;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
// String str0=sc.next();
// String str1=sc.next();
//测试
String str0="[1,2,2,1,3]";
String str1="[2,2,3]";
String[] strs0=str0.substring(1,str0.length()-1).split(",");
String[] strs1=str1.substring(1,str1.length()-1).split(",");
if(str0.length()str1.length()){
String[] temp=strs0;
strs0=strs1;
strs1=temp;
}
int[] arr0=new int[strs0.length];
int[] arr1=new int[strs1.length];
for(int i=0;i
3,最少几个硬币找零
package com.cnblogs.mufasa.Main3;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Scanner;
import java.util.Stack;
//递归调用,好像可以很好的解决问题
public class Main {
private final static int NUM=Integer.MAX_VALUE;
private static Stack
下一篇:winform中的确定取消