藍橋杯(java):數列特徵,查詢整數,楊輝三角,特殊的數字,迴文數
人生無趣,生活不易,一起找點樂子吧。
數列特徵:
問題描述
給出n個數,找出這n個數的最大值,最小值,和。
輸入格式
第一行為整數n,表示數的個數。
第二行有n個數,為給定的n個數,每個數的絕對值都小於10000。
輸出格式
輸出三行,每行一個整數。第一行表示這些數中的最大值,第二行表示這些數中的最小值,第三行表示這些數的和。
樣例輸入
5
1 3 -2 4 5
樣例輸出
5
-2
11
資料規模與約定
1 <= n <= 10000。
思維還一直處在python裡,直接就max(),min()了。查了下,有max函式的是collection,不會用,有會的,評論寫下面吧。
import java.util.*; public class Main { public static void main(String args[]){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int arr[] = new int[n]; for(int i = 0;i<n;i++){ arr[i] = sc.nextInt(); } sc.close(); int max = arr[0]; int min = arr[0]; int sum = 0; for(int i = 0;i<arr.length;i++){ if(arr[i]>max){ max = arr[i]; } if(arr[i]<min){ min = arr[i]; } sum += arr[i]; } System.out.println(max); System.out.println(min); System.out.println(sum); } }
迴圈遍歷了一遍,找最大最小值,順便求了累加,用於求平均。
查詢整數:
問題描述
給出一個包含n個整數的數列,問整數a在數列中的第一次出現是第幾個。
輸入格式
第一行包含一個整數n。
第二行包含n個非負整數,為給定的數列,數列中的每個數都不大於10000。
第三行包含一個整數a,為待查詢的數。
輸出格式
如果a在數列中出現了,輸出它第一次出現的位置(位置從1開始編號),否則輸出-1。
樣例輸入
6
1 9 4 8 3 9
9
樣例輸出
2
資料規模與約定
1 <= n <= 1000。
這個貌似也沒有說的點,交給python的話直接list.find(int)就好了,java只會用陣列,如果大家有其他的簡單資料結構,下面評論。迴圈遍歷查詢,返回下標,迴圈完未找到,立個flag做個標記就好。
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n];
for(int i = 0;i<n;i++){
arr[i] = sc.nextInt();
}
int a = sc.nextInt();
sc.close();
int state = 0;
for(int i = 0;i<arr.length;i++){
if(arr[i] == a){
System.out.println(i+1);
state = 1;
break;
}
}
if(state == 0){
System.out.println(-1);
}
}
}
楊輝三角:
問題描述
楊輝三角形又稱Pascal三角形,它的第i+1行是(a+b)i的展開式的係數。
它的一個重要性質是:三角形中的每個數字等於它兩肩上的數字相加。
下面給出了楊輝三角形的前4行:
1
1 1
1 2 1
1 3 3 1
給出n,輸出它的前n行。
輸入格式
輸入包含一個數n。
輸出格式
輸出楊輝三角形的前n行。每一行從這一行的第一個數開始依次輸出,中間使用一個空格分隔。請不要在前面輸出多餘的空格。
樣例輸入
4
樣例輸出
1
1 1
1 2 1
1 3 3 1
資料規模與約定
1 <= n <= 34。
資料規模在34以下,做個34*34的陣列儲存就好了,前兩行的資料手動寫出,剩下的由計算給出,陣列生成後,迴圈遍歷輸出每行即可。
import java.util.*;
public class Main {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.close();
int list[][] = new int[34][34];
list[0][0] = 1;
list[1][0] = 1;
list[1][1] = 1;
for (int i = 3;i<=34;i++){
list[i-1][0] = 1;
for(int j = 1;j<=i-2;j++){
list[i-1][j] = list[i-2][j] + list[i-2][j-1];
}
list[i-1][i-1] = 1;
}
for(int i = 0;i<n;i++){
for(int j = 0;j<=i;j++){
System.out.printf(list[i][j] + " ");
}
System.out.println();
}
}
}
沒什麼難的東西,就是麻煩,計算的時候別把下標算錯就好。
特殊的數字:
問題描述
153是一個非常特殊的數,它等於它的每位數字的立方和,即153=1*1*1+5*5*5+3*3*3。程式設計求所有滿足這種條件的三位十進位制數。
輸出格式
按從小到大的順序輸出滿足條件的三位十進位制數,每個數佔一行。
題目很簡單,資料範圍為三位十進位制數,也就是說從100到999.需要做的就是判斷數字的每位數字的立方和是不是等於原數值而已,程式碼的核心點是怎樣把數字的每一位一個個取出來。記住一個蠢方法,如果除法解決不了,就用取餘。比如取出百位數字:num/100,取出個位數字num%10,十位數字就別想了,等於num - 百位數字x100 - 個位數字(如果非要想的話(num/10)%10 )。完,可以了,還有一種方法,先把數字當成字串來處理,將每個字元取出,然後再轉換成數字。這種方法用python很好實現,java也並不難,可以嘗試下。
示例程式碼:
import java.util.*;
public class Main {
public static void main(String args[]){
int a,b,c;
for(int i = 100;i<1000;i++){
a = i/100;
b = (i/10)%10;
c = i%10;
if(a*a*a+b*b*b+c*c*c == i){
System.out.println(i);
}
}
}
}
迴文數:
問題描述
1221是一個非常特殊的數,它從左邊讀和從右邊讀是一樣的,程式設計求所有這樣的四位十進位制數。
輸出格式
按從小到大的順序輸出滿足條件的四位十進位制數。
這個問題一開始會怎樣考慮,還是把數字一個個取出來嗎,但是此問題我們需要做的是將數字倒過來,其實並沒有什麼邏輯上的計算,因此,考慮上道題我說的那個方法,把數字當成字串,將字串倒置,來比較倒置前後是否相同,相同就輸出。
字串的倒置有方法嗎?有,需要箇中介StringBuilder(),StringBuilder的reverse方法可以將引數倒置,他的toString方法可以把StringBuilder物件轉回String。那就很簡單了:
public class Main {
public static void main(String args[]){
String s;
for(int i = 1000;i<10000;i++){
s = ""+i;
if(new StringBuilder(s).reverse().toString().equals(s)){
System.out.println(i);
}
}
}
}
ok,寫完了吧。
java筆記只寫一點:
1、將字串s倒置:new StringBuilder(s).reverse().toString()