javajava演算法題目
Ⅰ java演算法題:判斷並輸出101-200中所有素數,代碼中單等號與雙等號的區別
這是很基礎的問題
單= 是賦值運算, 把後面的值賦值給前面的參數
雙= 是關系運算, 比較前後兩個參數是否相同
注意如果???處, 用單等, 就是賦值運算, 將ture 賦值 給 flag, 所以if中會一直是true, 也會一直執行if中的代碼
雙== 就是比較了啊, 結果是真 才會執行if中代碼
Ⅱ Java簡單演算法問題
初步做了一個出來,但是效率並不是很高,前100個計算速度還可以,但是往後就很慢了。如果什麼時候有空的話可以再看看,先給你代碼吧,不知道能不能幫上你
publicclassAlisandaNumber{
privatestaticfinalintMAX_INDEX=1000;//可以先把這個常量改為1-6,驗證正確性
publicstaticvoidmain(String[]args){
inta=0;
intindex=0;
while(index<MAX_INDEX){
a+=6;//每次循環自增6,由題目規律可知A是6的倍數
booleanbreakOut=false;
//最大的約數為此數的平方根,因為如果是兩個平方根相乘的話,剩下的就只有1了
intmaxNum=(int)Math.ceil(Math.sqrt(a));
p:
for(intp=1;p<=maxNum;p++){
if(a%p!=0){
continue;//如果不是約數的話,沒必要考慮,下同
}
//最大約數為平方根的相反數,原理同上
maxNum=(int)Math.ceil(Math.sqrt(a/p));
for(intq=-1;q>=-maxNum;q--){//q和r必為負數
if(a%q!=0){
continue;
}
intr=a/(p*q);
intnonZero=p*q+p*r+q*r;
if(nonZero==0){
continue;
}
if((a==p*q*r)&&(a==(p*q*r)/(nonZero))){
index++;
breakOut=true;
breakp;//跳出外層循環
}
}
}
if(breakOut){
System.out.println(String.format("第%d個壓力山大數是%d",index,a));
}
}
}
}
Ⅲ java演算法(2個數組 從數組A中取出任意幾個數 是否存在於第B個數組中 存在就給a加1)
ps:我的答案只給識貨的人看
package;
importjava.util.Arrays;
importjava.util.LinkedList;
publicclassRecursionSubNSort
{
publicstaticvoidmain(String[]args)
{
inta=0;
String[]A={"01","09","11","07","05","02"};
String[]B={"03","08","11","07","06"};
Stringbstr=""+Arrays.toString(B).replaceAll("[\[\],\s]",",")+"";
LinkedList<String[]>list=newLinkedList<String[]>();
recursionSub(list,1,A,0,-1);
for(String[]strings:list)
{
Strings=Arrays.toString(strings);
Stringstr=s.replaceAll("[\[\]]",",");
inti=bstr.split(str).length-1;
a+=i;
System.out.println(s+"出現在B中的次數有:"+i);
}
System.out.println("結果a="+a);
System.out.println("======================================");
list.clear();
a=0;
recursionSub(list,2,A,0,-1);
for(String[]strings:list)
{
Strings=Arrays.toString(strings);
System.out.println("組合"+s);
for(Stringstring:strings)
{
inti=bstr.split(","+string+",").length-1;
a+=i;
System.out.println(string+"在B中出現的次數有:"+i);
}
}
System.out.println("結果a="+a);
System.out.println("======================================");
list.clear();
a=0;
recursionSub(list,5,A,0,-1);
for(String[]strings:list)
{
Strings=Arrays.toString(strings);
System.out.println("組合"+s);
for(Stringstring:strings)
{
inti=bstr.split(","+string+",").length-1;
a+=i;
System.out.println(string+"在B中出現的次數有:"+i);
}
}
System.out.println("結果a="+a);
}
privatestaticLinkedList<String[]>recursionSub(LinkedList<String[]>list,intcount,String[]array,intind,
intstart,int...indexs)
{
start++;
if(start>count-1)
{
returnnull;
}
if(start==0)
{
indexs=newint[array.length];
}
for(indexs[start]=ind;indexs[start]<array.length;indexs[start]++)
{
recursionSub(list,count,array,indexs[start]+1,start,indexs);
if(start==count-1)
{
String[]temp=newString[count];
for(inti=count-1;i>=0;i--)
{
temp[start-i]=array[indexs[start-i]];
}
list.add(temp);
}
}
returnlist;
}
}
Ⅳ java演算法面試題
三個for循環,第一個和第二個有啥區別?去掉一個吧
可以用迭代器remove方法,在移除的同時添加。
不知道是你記錯了還是題本身就這樣,我只想說:
寫這代碼的是二貨么?
1、每個循環的索引都是從0開始,這是什麼遍歷方式?
2、看這題的目的是想把用戶添加到相應的組里,這我就不明白了,新建一個用戶的時候就沒分配組么?那用戶的GroupId哪來的?
3、這是一個操作,難道就不會根據GroupId直接查出用戶或者組么?
這哪是優化代碼?分明是挖坑。
Ⅳ JAVA演算法題目:int數組內取數相加湊數
首先觀察數組可以排除幾個數:588,4375,5184 因為他們如何相加也不會以0結尾。限於篇幅,部分代碼如下,剩餘的循環可以自己添加下,採用窮舉法:
public class DoMain {
public void doit(){
int[] a = new int[] { 460, 720, 1250, 1800, 2200, 3080, 4100,
6510, 6900, 9000 };
for(int i1=0;i1<a.length;i1++){
for(int i2=i1+1;i2<a.length;i2++){
if(a[i1]+a[i2]==13750){
System.out.println(a[i1]+";"+a[i2]);
}
for(int i3=i2+1;i3<a.length;i3++){
if(a[i1]+a[i2]+a[i3]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]);
}
for(int i4=i3+1;i4<a.length;i4++){
if(a[i1]+a[i2]+a[i3]+a[i4]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]);
}
for(int i5=i4+1;i5<a.length;i5++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]);
}
for(int i6=i5+1;i6<a.length;i6++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]);
}
for(int i7=i6+1;i7<a.length;i7++){
if(a[i1]+a[i2]+a[i3]+a[i4]+a[i5]+a[i6]+a[i7]==13750){
System.out.println(a[i1]+";"+a[i2]+";"+a[i3]+";"+a[i4]+";"+a[i5]+";"+a[i6]+";"+a[i7]);
}
}
}
}
}
}
}
}
}
public static void main(String[] args) {
DoMain main= new DoMain();
main.doit();
}}
Ⅵ 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);
}
}