問(wèn)題描述
利用字母可以組成一些美麗的圖形誊抛,下面給出了一個(gè)例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
這是一個(gè)5行7列的圖形,請(qǐng)找出這個(gè)圖形的規(guī)律独泞,并輸出一個(gè)n行m列的圖形。
輸入格式
輸入一行,包含兩個(gè)整數(shù)n和m,分別表示你要輸出的圖形的行數(shù)的列數(shù)肺樟。
輸出格式
輸出n行,每個(gè)m個(gè)字符逻淌,為你的圖形。
樣例輸入
5 7
樣例輸出
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
數(shù)據(jù)規(guī)模與約定
1 <= n, m <= 26疟暖。
解析
其實(shí)我覺(jué)得這道題就是找規(guī)律,給出源碼
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int a = scanner.nextInt(); //表示行
int b = scanner.nextInt(); //表示列
char[] c = new char[b + 1];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
c[j] = (char) ('A' + Math.abs(j - i));
}
System.out.println(c);
}
}
}
Description
給定一個(gè)N階矩陣A卡儒,輸出A的M次冪(M是非負(fù)整數(shù))
例如:
A =
1 2
3 4
A的2次冪
7 10
15 22
Input
第一行是一個(gè)正整數(shù)N、M(1<=N<=30, 0<=M<=5)俐巴,表示矩陣A的階數(shù)和要求的冪數(shù)
接下來(lái)N行骨望,每行N個(gè)絕對(duì)值不超過(guò)10的非負(fù)整數(shù),描述矩陣A的值
Output
輸出共N行欣舵,每行N個(gè)整數(shù)擎鸠,表示A的M次冪所對(duì)應(yīng)的矩陣。相鄰的數(shù)之間用一個(gè)空格隔開(kāi)
Sample Input
2 2
1 2
3 4
Sample Output
7 10
15 22
解析
本題考的是矩陣的乘法缘圈,矩陣用二維數(shù)組表示劣光,如下:
int[][] array_1 = new int[n][n];
int[][] array_2 = new int[n][n];
這是相稱的兩個(gè)數(shù)組
然后此題的重點(diǎn)是矩陣相乘的算法:
//矩陣相乘
for (int a = 1; a < m; a++) {
int[][] array_3 = new int[n][n];
//行
for (int i = 0; i < array_1.length; i++) {
//列
for (int j = 0; j < array_1[i].length; j++) {
sum = 0;
for (int k = 0; k < array_1.length; k++)
sum += array_2[i][k] * array_1[k][j];
array_3[i][j] = sum;
}
}
for (int i = 0; i < array_3.length; i++) {
for (int j = 0; j < array_3.length; j++) {
array_2[i][j] = array_3[i][j];
}
}
}
array_3表示的是臨時(shí)數(shù)組,用以存儲(chǔ)兩個(gè)矩陣的乘積糟把,根據(jù)矩陣的乘法可以得出
array_3[i][j] += array_2[i][k] * array_1[k][j];
反復(fù)乘m次即可得到最后的結(jié)果绢涡。
!G卜琛P劭伞!!J弧4鲜妗!E凹薄箱残!但是此題到此并未結(jié)束,因?yàn)轭}中給出了如下條件:
正整數(shù)N戏仓、M(1<=N<=30, 0<=M<=5)
m是可以為0的疚宇,如果m為0需要我們輸出單位矩陣,所以下面的一步操作必不可少:
if (m == 0) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j)
array_2[i][j] = 1;
else
array_2[i][j] = 0;
}
}
}
至此赏殃,本題解答完畢敷待,下面給出完整的代碼:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int sum;
int[][] array_1 = new int[n][n];
int[][] array_2 = new int[n][n];
for (int i = 0; i < array_1.length; i++) {
for (int j = 0; j < array_1[i].length; j++) {
array_2[i][j] = array_1[i][j] = sc.nextInt();
}
}
if (m == 0) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j)
array_2[i][j] = 1;
else
array_2[i][j] = 0;
}
}
}
//矩陣相乘
for (int a = 1; a < m; a++) {
int[][] array_3 = new int[n][n];
//行
for (int i = 0; i < array_1.length; i++) {
//列
for (int j = 0; j < array_1[i].length; j++) {
sum = 0;
for (int k = 0; k < array_1.length; k++)
sum += array_2[i][k] * array_1[k][j];
array_3[i][j] = sum;
}
}
for (int i = 0; i < array_3.length; i++) {
for (int j = 0; j < array_3.length; j++) {
array_2[i][j] = array_3[i][j];
}
}
}
//遍歷
for (int i = 0; i < array_2.length; i++) {
for (int j = 0; j < array_2[i].length; j++)
System.out.print(array_2[i][j] + " ");
System.out.println();
}
}
}
Tips
這里對(duì)二維數(shù)組的長(zhǎng)度做個(gè)小的記錄
int[][] arr = new int[3][4]
3表示又3個(gè)數(shù)組
4表示有每個(gè)數(shù)組中有四個(gè)元素
即數(shù)組的長(zhǎng)度是3,數(shù)組的元素的長(zhǎng)度是4
上面這段代碼的運(yùn)行結(jié)果是
Description
FJ在沙盤(pán)上寫(xiě)了這樣一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的規(guī)律并寫(xiě)所有的數(shù)列AN嗎仁热?
Input
僅有一個(gè)數(shù):N ≤ 26榜揖。
Output
請(qǐng)輸出相應(yīng)的字符串AN,以一個(gè)換行符結(jié)束抗蠢。輸出中不得含有多余的空格或換行举哟、回車(chē)符。
Sample Input
3
Sample Output
ABACABA
源代碼
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
System.out.println(An(n));
}
static StringBuffer An(int n) {
if (n != 1) {
char c = (char) ('A' + n - 1);
return An(n - 1).append(c).append(An(n - 1));
} else {
return new StringBuffer("A");
}
}
}