1. 程式人生 > >java一些經典演算法題

java一些經典演算法題

寫在開頭:幾道java演算法題,自己的思路,不對的地方望指正。用的都是最基本的方法,一起加油

·1 *求1!+2!+3!.....+30!的和 並用方法。

int a=1,b=30;

qiuhe(a, b);*/

public class d501 {


public static void main(String[] args) {

qiuhe(1,30);


}
public static void qiuhe(int a,int b){
long sum = 0;
for(int i =a;i<=b;i++)
sum += jieCheng(i);

System.out.println(a+"--"+b+"的階乘和為:"+sum);

}
public static int jieCheng(int c){

int jiecheng = 1;
for(int i = 1;i<=c;i++)
jiecheng *=i;
return jiecheng;
}


}

2  輸入兩個正整數m和n,求其最大公約數和最小公倍數。

public class d502 {


public static void main(String[] args) {

qiu(8,4);
}
public static void qiu(int a,int b )
{//輾轉相除法求最大公約數
int gy;
int gb;
if(a>b)
gy = gongYueShu(a,b);
else
gy = gongYueShu(b,a);
gb = a*b/gy;

System.out.println("最大公約數:"+gy);
System.out.println("最小公倍數:"+gb);


}
public static int gongYueShu(int a,int b){

while(b!=0){

a =a%b;
if(a == 0)
return b;
else
b = b%a; 
}
return a;
}}

3.一個數如果恰好等於它的因子之和,這個數就稱為 "完數 "。例如6=1+2+3.程式設計找出1000以內的所有完數

public class d503 {


public static void main(String[] args) {

wanShu();
}
public static void wanShu()
{
for(int i = 1;i<1000;i++){
int sum = 0;
for(int j =1;j<i;j++){
if(i%j==0){
sum +=j;
}
}
if(sum ==i )
System.out.print(sum+" ");
}}}

4 一球從100米高度自由落下,每次落地後反跳回原高度的一半;再落下,求它在第10次落地時,共經過多少米?第10次反彈多高?

public class d504 {



public static void main(String[] args) {

luoDi(100,8);
}
public static void luoDi(int heigh,int c){

int sum = 0;

for(int i = 1;i<=c;i++){
{

sum +=heigh;
heigh = heigh/2;

}
}
System.out.println("第"+c+"次落地共經過"+sum+"米");
System.out.println("第"+c+"反彈"+heigh+"米");


}
}

5/*題目:猴子吃桃問題:猴子第一天摘下若干個桃子,當即吃了一半,還不癮,又多吃了一個
第二天早上又將剩下的桃子吃掉一半,又多吃了一個。以後每天早上都吃了前一天剩下的一半零一個。
到第10天早上想再吃時,見只剩下一個桃子了。求第一天共摘了多少。*/
public class d506 {


public static void main(String[] args) {

qiu(10);
}
public static void qiu(int day)
{int i ;
int[] arr = new int[10];
arr[9] = 1;
for(i =8;i>=0;i--){
arr[i] = arr[i+1]*2+1;
}
System.out.println(arr[0]);
}


}

6/*打印出如下圖案(菱形)


*
***
******
********
******
***
**/
public class d507 {


public static void main(String[] args) {

print();
}
public static void print()
{
for(int i =1;i<=4;i++){
if(i<=2){
for(int j = 0;j<2*i-1;j++){
System.out.print("*");
}
System.out.println();
}else{
for(int j = 0;j<2*i;j++){
System.out.print("*");
}
System.out.println();
}
}
for(int i = 1 ;i<=3;i++){
if(i==1){
for(int j = 0;j<8-2*i;j++){
System.out.print("*");
}
System.out.println();
}else{
for(int j = 0;j<7-2*i;j++){
System.out.print("*");
}
System.out.println();
}
}
}}

7//有一分數序列:2/1,3/2,5/3,8/5,13/8,21/13...求出這個數列的前20項之和。
public class d508 {


public static void main(String[] args) {

qiuhe();
}
public static void qiuhe(){
float sum = 0f;
float fz = 2f;
float fm = 1f;
float temp ;

for(int i = 0;i<20;i++){
sum += fz/fm;
temp = fz;
fz = fz+fm;
fm = temp;
}
System.out.println(sum);
}


}

8 //利用遞迴方法求5!。
public class d509 {


public static void main(String[] args) {

System.out.println(diGui(5));
}
public static int diGui(int num)
{int jc;
if(num==0)
return 1;
else
jc = num*diGui(num-1);

return jc;

}

9//給一個不多於5位的正整數,要求:一、求它是幾位數,二、逆序打印出各位數字。


public class d511 {


public static void main(String[] args) {

get(10222);
}
public static void get(int num)
{int[] arr = new int[5];
int i = 0;
if(num>99999)
System.out.println("數字太大");

while(num!=0){

arr[i]= num%10;
num = num/10;
i++;
}

System.out.println(i+"位數字");
for(int j = 0;j<=i-1;j++)
System.out.print(arr[j]+" ");
}


}

10//一個5位數,判斷它是不是迴文數。即12321是迴文數,個位與萬位相同,十位與千位相同。
public class d512 {


public static void main(String[] args) {

isHui(32321);
}
public static void isHui(int num){
int[] arr = new int[5];
int i = 0;

while(num!=0){
arr[i] = num%10;
num /=10;
i++;
}
if(arr[0]==arr[4]  && arr[1]==arr[3]){
System.out.println("是迴文數");
}else{
System.out.println("不是迴文數");
}

}


}

11//求一個3*3矩陣對角線元素之和
/*1 2 3            00 01 02
  4 5 6   10 11 12
  7 8 9 */   //    20 21 22
import java.util.*;
public class d513 {


public static void main(String[] args) {
qiu();
}
public static void qiu(){
int sum = 0;
int k = 1;
int[][] arr = new int[3][3];
Scanner sc = new Scanner(System.in);
System.out.println("請輸入9個數組成一個3*3矩陣");
for(int i = 0;i<3;i++){
for(int j = 0;j<3;j++){
System.out.println("請輸入第"+(k++)+"個數:");
arr[i][j] = sc.nextInt();
if(i == j)
sum +=arr[i][j];
if(Math.abs(i-j)==2)
sum +=arr[i][j];
}

}
System.out.println(sum);
}



}

12//將一個數組逆序輸出。
public class d514 {


public static void main(String[] args) {

int[] arr = {1,2,34,5,6,7,8,9};
print(arr);


}
public static void print(int[] arr){
for(int i = arr.length-1;i>=0;i--)
System.out.print(arr[i]+" ");
}


}

13  //輸入陣列,最大的與第一個元素交換,最小的與最後一個元素交換,輸出陣列。


public class d516 {


public static void main(String[] args) {

int[] arr = {5,4,3,4,10,1,7,8,9,5};
for(int i = 0;i<arr.length;i++){
System.out.print(arr[i]+" ");}//先遍歷一遍
System.out.println();
qiu(arr);

}
public static void qiu(int[] arr){
huanMax(arr);
huanMin(arr);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");//交換完成,遍歷
}
}


public static  void huanMax(int[] arr){
int max = arr[0];
int j = 0;
for(int i =0;i<arr.length;i++){
if(arr[i]>max){
max = arr[i];//得到最大值
}
for( j = 0;j<arr.length;j++){
if(max==arr[j])
break;//得到最大值對應的索引
}


}
int c = arr[j];
arr[j] = arr[0];
arr[0] = c; //交換

}
public static void huanMin(int[] arr){

int min = arr[0];
int j = 0;
for(int i = 0;i<arr.length;i++){
if(arr[i]<min){
min = arr[i];//求最小值
}
}
for( j = 0;j<arr.length;j++){
if(min==arr[j])
break;//得到最小值的索引
}


int c= arr[j];
arr[j] = arr[arr.length-1];
arr[arr.length-1] = c;//交換
}


}

14   //編寫一個函式,輸入n為偶數時,呼叫函式求1/2+1/4+...+1/n,
//當輸入n為奇數時,呼叫函式1/1+1/3+...+1/n
public class d517 {


public static void main(String[] args) {
sum1(13);



}
public static void sum1(int n){

if(n%2==0){
double he = 0;

int fm;
for(fm=2;fm<=n;fm +=2){
he +=1/(double)fm;//fm是int 不轉換成double的話結果是0
}

System.out.println("he:"+he);
}

else
{
double he = 0;

int fm = 1;
for(;fm<=n;fm+=2){

he +=1/(double)fm;
}

System.out.println("he:"+he);
}
}}

15有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第四個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?
規律,1,2,3,5,8,13,21.... 
public class d5019 {


public static void main(String[] args) {

for(int i = 1; i<100;i++)
System.out.print(getNumber(i)+" ");


}
public static int getNumber(int mouth){
if(mouth==1 || mouth==2)// ||
return 1;
else
return getNumber(mouth-1)+getNumber(mouth-2);//遞迴

/*mouth = 5;
getNumber(4)+getNumber(3);
mouth = 4;
getNumber(3)+getNumber(2);
mouth = 3;
getNumber(2)+getNumber(1);
mouth = 2;
return 1;
*/
}


}

16  /*2.列印一個實心菱形圖案
   *
  ***
 *****
*******
 *****
  ***
   * */
public class day01_02 {


public static void main(String[] args) {

for(int i = 1;i <= 4 ; i++){
for(int j = 1; j<=4-i; j++){
System.out.print(" ");
}
for(int j = 1;j<=2*i-1;j++){
System.out.print("*");
}
System.out.println();
}
for(int i = 1;i<=3;i++){
for(int j =1;j<=i;j++){
System.out.print(" ");
}

for(int j=1;j<=7-2*i;j++){
System.out.print("*");
}
System.out.println();
}


}


}

17  /*3.列印一個空心菱形圖案
問題:用*號列印一個如下的空心菱形圖案 :


                 *
                * *
               *   *
              *     *
               *   *
                * *
                 *     */


public class day01_03 {


public static void main(String[] args) {

for(int i = 1;i<=4;i++){
for(int j = 1;j<=4-i;j++)
System.out.print(" ");
for(int j = 1;j<=2*i-1;j++){
if(j==1||j==2*i-1)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}
for(int i = 1;i<=3;i++){
for(int j = 1;j<=i;j++)
System.out.print(" ");
for(int j = 1;j<=7-2*i;j++){
if(j==1||j==7-2*i)
System.out.print("*");
else
System.out.print(" ");
}
System.out.println();
}




}

}

相關推薦

java一些經典演算法

寫在開頭:幾道java演算法題,自己的思路,不對的地方望指正。用的都是最基本的方法,一起加油 ·1 *求1!+2!+3!.....+30!的和 並用方法。 int a=1,b=30;qiuhe(a, b);*/ public class d501 {public sta

JAVA之——經典演算法50

/******************************************************************************** @author liuyazhuang <[email protected]>******

演算法】計算機圖形學的一些經典:判斷點在多邊形內,隨機生成三角形內的點,判斷兩個矩形是否相交等

前幾天面試的時候被問到了,如何隨機在三角形內生成點,我按照我的想法回答了一遍,但覺得回答的不夠好。最後面試官說了一個最優的方法。覺得不錯,順帶總結一下最近看到的一些關於計算機圖形學方面的經典小題,知乎上看到的還有Leetcode上的 1.判斷一個點

JAVA之——經典演算法50(題意修訂版)

/******************************************************************************** @author liuyazhuang <[email protected]>******

PHP經典演算法

1.百錢買百雞 公雞5文錢一隻,母雞3文錢一隻,小雞3只一文錢,用100文錢買一百隻雞,其中公雞,母雞,小雞都必須要有,問公雞,母雞,小雞要買多少隻剛好湊足100文錢。  分析:估計現在小學生都能手工推算這套題,只不過我們用計算機來推算,我們可以設公雞為x,母雞為y,小雞為z,那麼我們可以得出如

面試經典演算法集錦——《劍指 offer》小結

從今年 3 月份開始準備找實習,到現在校招結束,申請的工作均為機器學習/資料探勘演算法相關職位,也拿到了幾個 sp offer。經歷這半年的洗禮,自己的綜合能力和素質都得到了一個質的提升。 實話說對於未來去哪裡,即將如何發展還沒有清晰的規劃。迷茫總是會有的,但這並不是停止腳步的理由。找工作是在漫

經典演算法1:找出陣列中只出現一次的數字,其它數字都出現了兩次

題目:一個整型數組裡除了一個數字之外,其它的數字都出現了兩次。請寫程式找出這個只出現一次的數字。要求時間複雜度是O(n),空間複雜度是O(1)。 分析:由於題目要求時間複雜度為O(n),所以先排序然後比較相鄰數字是否相同的思路被排除。             空間複雜度是O

經典演算法——第六 協同推薦SlopeOne 演算法

相信大家對如下的Category都很熟悉,很多網站都有類似如下的功能,“商品推薦”,"猜你喜歡“,在實體店中我們有導購來為我們服務,在網路上 我們需要同樣的一種替代物,如果簡簡單單的在資料庫裡面去撈,去比較,幾乎是完成不了的,這時我們就需要一種協同推薦演算法,來高效的推

經典演算法之Happy Number

問題描述: Write an algorithm to determine if a number is "happy". A happy number is a number defined by the following process: Starting w

經典演算法:大資料處理常見演算法

第一部分、十道海量資料處理 1、海量日誌資料,提取出某日訪問百度次數最多的那個IP。   此題,在我之前的一篇文章演算法裡頭有所提到,當時給出的方案是:IP的數目還是有限的,最多2^32個,所以可以考慮使用hash將ip直接存入記憶體,然後進行統計。  再詳細介紹下此方案:

關於資料降維的一些經典演算法

資料降維 0 前言 降維方法可分為有監督降維方法、半監督降維方法、無監督降維方法。 有監督的降維方法有:線性判別式分析(Linear discriminant analysis, LDA);

經典演算法:無序整數陣列中找第k大的數

經典問題:寫一段程式,找出陣列中第k大的數,輸出數所在的位置。 【解法一】先排序,然後輸出第k個位置上的數 我們先假設元素的數量不大,例如在幾千個左右,在這種情況下,那我們就排序一下吧。在這裡,快速排序或堆排序都是不錯的選擇,他們的平均時間複雜度 都是 O(N * logN

經典演算法:數字三角形尋找最大路徑

題目:數字三角形,從頂部出發,在每一結點可以選擇向左走或得向右走,一直走到底層,要求找出一條路徑,該路徑上的數字和最大,輸出這個最大值。(1)樣例輸入:第一行是數塔層數N(1<=N<=100)。第二行起,從一個數字按數塔圖形依次遞增,共有N層。51311 812

Python的100道經典演算法(1)

按照c語言的100道經典演算法題,自己原創寫的,就得是自己的練習題了 【程式1】 題目:有1、2、3、4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少? 程式分析:可填在百位、十位、個

java實現經典演算法

氣泡排序 /** *氣泡排序 *比較相鄰的兩個元素,如果第一個比第二個大則將兩個交換順序 *i<numbers.length 控制排序輪數 一般為陣列長度減1次,因為最後一次迴圈只剩下一個數組元素,不需要對比,同時陣列已經完成排序了 *j<nu

一些經典演算法的js實現方案

題目描述 在一個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。 function Find(target,array){ //程式碼

Codility經典演算法之九:MissingInteger

Task description:This is a demo task.Write a function:class Solution { public int solution(int[] A); }that, given an array A of N integers

連結串列經典演算法實現

本文包含連結串列的以下內容:   1、單鏈表的建立和遍歷   2、求單鏈表中節點的個數   3、查詢單鏈表中的倒數第k個結點(劍指offer,題15)   4、查詢單鏈表中的中間結點   5、合併兩個有序的單鏈表,合併之後的連結串列依然有序【出現頻率高】(劍指o

經典演算法15-稀疏矩陣及三元組

一. 引入 我們知道矩陣是一個非常強大的資料結構,在動態規劃以及各種圖論演算法上都有廣泛的應用。 當然矩陣有著不足的地方就是空間和時間複雜度都維持在N²上,比如1w個數字建立一個矩陣,在記憶體中會佔用1w*1w=1億的型別空間,這時就會遇到outofmemo

關於樹的經典演算法

package BinaryTreeSummary; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.u