本文目錄一覽:
- 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));
}
}
}
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254946.html