java藍橋杯試題
阿新 • • 發佈:2020-02-12
因為要參加藍橋杯,琢磨了一下演算法,原來數學不好是這麼難搞:下面是一些藍橋杯的試題(習題)。我用的是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,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(); } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。