1. 程式人生 > 程式設計 >java藍橋杯試題

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 這樣的關係的分類才符合題目的要求}

java藍橋杯試題

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
請嚴格按要求輸出,不要畫蛇添足地列印類似:“請您輸入...” 的多餘內容。

java藍橋杯試題

(這裡演示了沒有用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,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();
	}
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。