本文目录一览:
- 1、java算法题
- 2、Java算法题:判断并输出101-200中所有素数,代码中单等号与双等号的区别?
- 3、java 一道算法题,阿里面试的题,我同学给我的,希望有人解答下?
- 4、一道java算法题提供了正确代码,不知道是不是我理解错误运行结果并不是最大值?
- 5、java 算法题:将下面的字符串按规则拆开,保存进list集合中
- 6、Java简单算法问题
java算法题
public class Monkey
{
public static void main(String[] args)
{
int sum=0,remain=1;
//每天吃剩的桃子加一个正好是前一天桃子的一半,每天桃子的总数就是前一天剩下桃子的数量
for(int day=9;day=1;day--)
{
sum=(remain+1)*2;
remain=sum;
System.out.println("第"+day+"天还剩"+remain+"个桃子");
}
System.out.println(sum);
}
}
Java算法题:判断并输出101-200中所有素数,代码中单等号与双等号的区别?
这是很基础的问题
单= 是赋值运算, 把后面的值赋值给前面的参数
双= 是关系运算, 比较前后两个参数是否相同
注意如果???处, 用单等, 就是赋值运算, 将ture 赋值 给 flag, 所以if中会一直是true, 也会一直执行if中的代码
双== 就是比较了啊, 结果是真 才会执行if中代码
java 一道算法题,阿里面试的题,我同学给我的,希望有人解答下?
HashMapString, Object ihp = new LinkedHashMapString, Object();
自定义一个类
static class MyMap
{
List[] lists;
public MyMap(List... lists)
{
this.lists = lists;
}
public String toString()
{
if (lists == null || lists.length == 0)
{
return "{}";
}
StringBuilder sb = new StringBuilder();
sb.append('{');
int i = 0;
for (List list: lists)
{
sb.append(list);
i++;
if (i == lists.length)
return sb.append('}').toString();
sb.append(",");
}
return "{}";
}
}
ihp.put("on1",new MyMap(list2,list1));
ihp.put("on2",new MyMap(list4,list3));
ihp.put("on3",new MyMap(list5));
ihp.put("on4",new MyMap(list6));
System.out.println(ihp.toString());
估计有更好的办法,最开始想到的是List[],发现打印出来是[[xxx,xxx,xxx],[xx,x,x]]这种结构
一道java算法题提供了正确代码,不知道是不是我理解错误运行结果并不是最大值?
首先理解下题意,关键是连续的子数组,比如{1,2,-1} ,连续的子数组包括{1}、{2}、{-1}、{1,2}、{2,-1}、{1,2,-1}
其次是求各子数组和的最大值,上面的算法求最大值分两部分,循环遍历所有值
curSum :用于某一个子数组的累加和
curMaxSum:用于记录历史最大累加和
上面算法的start和end其实没用,本意是找出具体子数组,但上面算法部分情况下是无法实现的
@Test
public void test(){
// int[] num = {1,-2,3,10,-4,7,2,-5};
//int[] num = {1,-2,3,10,-4,10,2,-5};
int[] num = {-1,-2,3,4,-5,-6,-7};
System.out.println(maxSum(num));
}
public int maxSum(int[] num){
int curSum = 0;
int curMaxSum = -99999999;
int finalStart = 0;
int finalEnd = 0;
int start = 0;
for(int i=0;inum.length;i++){
if(curSum=0){
curSum = num[i];
start = i;
}
else{
curSum += num[i];
}
if(curSumcurMaxSum){
finalStart = start;
finalEnd = i;
curMaxSum = curSum;
}
}
for(int i = finalStart;i=finalEnd;i++){
System.out.println(num[i]);
}
return curMaxSum;
}
java 算法题:将下面的字符串按规则拆开,保存进list集合中
用String类的split函数先按中文逗号切分,再按"#"切分,就可以把此字符串前面的字母保存在集合a中,将后面的文字保存在集合b中。具体的Java程序如下:
import java.util.ArrayList;
import java.util.List;
public class CC {
public static void main(String[] args) {
String s="yw#语文,ss#数学,yy#英语,ty#体育";
ListString a=new ArrayListString();
ListString b=new ArrayListString();
String[]s1=s.split(",");
for(String tmp:s1){
String[]s2=tmp.split("#");
a.add(s2[0]);
b.add(s2[1]);
}
for(int i=0;ia.size();i++)
System.out.print(a.get(i)+" ");
System.out.println();
for(int i=0;ib.size();i++)
System.out.print(b.get(i)+" ");
System.out.println();
}
}
运行结果:
yw ss yy ty
语文 数学 英语 体育
Java简单算法问题
初步做了一个出来,但是效率并不是很高,前100个计算速度还可以,但是往后就很慢了。如果什么时候有空的话可以再看看,先给你代码吧,不知道能不能帮上你
public class AlisandaNumber {
private static final int MAX_INDEX = 1000; // 可以先把这个常量改为1-6,验证正确性
public static void main(String[] args) {
int a = 0;
int index = 0;
while(index MAX_INDEX) {
a += 6; // 每次循环自增6,由题目规律可知A是6的倍数
boolean breakOut = false;
// 最大的约数为此数的平方根,因为如果是两个平方根相乘的话,剩下的就只有1了
int maxNum = (int) Math.ceil(Math.sqrt(a));
p:
for(int p = 1; p = maxNum; p ++) {
if(a % p != 0) {
continue; // 如果不是约数的话,没必要考虑,下同
}
// 最大约数为平方根的相反数,原理同上
maxNum = (int) Math.ceil(Math.sqrt(a / p));
for(int q = -1; q = -maxNum; q --) { // q和r必为负数
if(a % q != 0) {
continue;
}
int r = a / (p * q);
int nonZero = p * q + p * r + q * r;
if (nonZero == 0) {
continue;
}
if((a == p * q * r) (a == (p * q * r) / (nonZero))) {
index ++;
breakOut = true;
break p; // 跳出外层循环
}
}
}
if(breakOut) {
System.out.println(String.format("第%d个压力山大数是%d", index, a));
}
}
}
}