藍橋杯java試題


因爲要參加藍橋杯,琢磨了一下算法,原來數學不好是這麼難搞:下面是一些藍橋杯的試題(習題)。我用的是java ,我看網上的人多數用的是c語言。有更好的方法希望可以分享一下下。

1.      有50枚硬幣,可能包括4種類型:1元,5角,1角,5分。

已知總價值爲20元。求各種硬幣的數量。
比如:2,34,6,8 就是一種答案。
而 2,33,15,0 是另一個可能的答案,顯然答案不唯一。
你的任務是確定類似這樣的不同的方案一共有多少個(包括已經給出的2個)?
{
可以看出這裏的硬幣數量和存在着 1元×20+5角×10+1角×2+5分=400   這樣的關係的分類才符合題目的要求
}

2.四平方和(程序設計

四平方和的定理又稱拉格朗日定理:每個正整數都可以表示至多4個正整數的平方和。如果把0包括進去,就可以表示爲4個數的平方和。
比如:
   
5=0^2+0^2+1^2+2^2         7=1^2+1^2+1^2+2^2
對於一個給定的正整數,可能存在多種平方和的表示法。要求你4個數排序:

   0<=a<=b<=c<=d

並對所有的可能表示法按 a,b,c,d爲聯合主鍵升序排列,最後輸出第一個表示法。程序輸入爲一個正整數N(N<5000000),要求輸出4個非負整數,按從小到大排序,中間用空格分開,如,輸入

5
則程序輸出:
0 0 1 2

資源約定:
峯值內存消耗(含虛擬機) < 256M   CPU消耗  < 3000ms
請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。


(這裏演示了沒有用return 的情況,結果會把多種情況輸出,我們的最終答案只要第一中升序結果,所以,做題時一定要看清題目,這裏是給我自己的忠告。)

3.區間第K大的數

1.第一行輸入序列的個數n
2.第二行輸入一個序列
3.第三行輸入區間個數
4.輸入l ,r,k;    l :區間的開始     r : 區間的結束     k ; 第k個大的數

                        下標從1開始

import java.util.Scanner;

public class MainR {
	
	/*尋找第k大的數*/
	
	public void findK(int a[],int b[]){
		int l,r,k,i,j;
		l=b[0];
		r=b[1];
		k=b[2];
		int w=r-l+1;
		
		int[] c=new int[w];//存放區間的序列
		for(i=0;i<w;i++){
			c[i]=a[l-1];
			l+=1;
			if(l==(r+1))//當l==r+1時,區間序列達到最後一個
				break;
		}
		int small;
		for(i=0;i<c.length;i++){
			for(j=i+1;j<c.length;j++){
				if(c[i]<c[j]){
					small=c[i];
					c[i]=c[j];
					c[j]=small;
				}
			}
		}
		System.out.println(c[k-1]);
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in=new Scanner(System.in);
		
		int n=in.nextInt();//序列的個數
		//給定序列
		int array[]=new int[n];
		int i,j;
		for(i=0;i<n;i++){
			array[i]=in.nextInt();
		}
		//區間個數
		int m=in.nextInt();
		//l r k
		int[] bArray[]=new int[m][3];
		for(i=0;i<m;i++){
			for(j=0;j<3;j++){
				bArray[i][j]=in.nextInt();
			}
		}
		MainR w;
		for(i=0;i<m;i++){
			w=new MainR();
			w.findK(array, bArray[i]);
		}
		in.close();
	}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章