藍橋杯JAVA練習0214-BASIC21-23筆記
阿新 • • 發佈:2021-02-15
技術標籤:藍橋杯
BASIC-21 Sine之舞
神奇的奶牛
這道題主要是注意分辨公式的每個部分是什麼意思
呼叫兩個函式an、sn進行每一部分的輸出
sn函式為整體的把控,這裡需要呼叫an,所以可以把sn用含有an的公式表示出來,需要輸出an的時候呼叫an函式
主要難點在於an的寫法
我想到了遞迴,但是由於掌握不熟練最後還是用for迴圈寫出來了
容易出問題的地方:
- 對於迴圈中的起始點為0還是1,用1的話能更好聯絡公式找到規律
- 像開頭結尾的括號可以單獨使用for迴圈一次性輸出
code
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
sn(n);
}
public static void an(int n) {
int i;
for (i = 1; i <= n; i++) {
System.out.print("sin(" + i);
if (i != n) {
if (i % 2 == 1) {
System.out.print("-");
} else {
System.out.print("+");
}
}
}
for (i = 0; i < n; i++) {
System.out.print(")");
}
}
public static void sn(int n) {
int i;
for (i = 1; i < n; i++) {
System.out.print("(" );
}
for (i = 1; i <= n; i++) {
an(i);
int t = n - i + 1;
System.out.print("+" + t);
if (i != n) {
System.out.print(")");
}
}
}
}
BASIC-22 FJ的字串
講道理我剛開始並沒有發現什麼規律
然後發現原來是和上一項有關係
那就簡單了
遞迴
首先明白兩個重點就可以
- 每一項和上一項的聯絡(即中間新增新的字母)
- 遞迴結束條件(A1)
還有之前就容易錯的一點是強制轉換
(int)‘A’ √
int(‘A’) ×
code
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
an(n);
System.out.println();
}
public static void an(int n) {
int i, j;
if (n == 1) {
System.out.print("A");
} else {
an(n - 1);
char c = (char) ((int) 'A' + (n - 1));
System.out.print(c);
an(n - 1);
}
}
}
BASIC-23 晶片測試
看似複雜其實很簡單
只需要統計針對同一個晶片,所有晶片測得它是1的次數
如果次數超過晶片數的二分之一
就可以判定它是好的
因為“已知好晶片比壞晶片多”
code
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int a[][] = new int[n][n];
int i, j;
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
a[i][j] = scanner.nextInt();
}
}
/*
* for (i = 0; i < n; i++) { for (j = 0; j < n; j++) {
* System.out.print(a[i][j]); } }
*/
int num[] = new int[n];
for (i = 0; i < n; i++) {
num[i] = 0;
}
for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
if (a[i][j] == 1) {
num[j]++;
}
}
}
for (i = 0; i < n; i++) {
if (num[i] > n / 2) {
int t = i + 1;
System.out.print(t + " ");
}
}
}
}