第一题:
package com.test.bytecal;
import java.util.Scanner;
public class Compare {
private static String[] names = new String[10];
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入学生姓名,空格表示区分");
for(int i = 0; i < 10; i++){
names[i] = input.next();
}
quicksort(names, 0, names.length -1);
System.out.println("请输入你要查找的学生编号");
String nameFind = input.next();
boolean flag = false;
for(int i = 0; i < names.length; i++){
if(names[i].equals(nameFind)){
flag = true;
System.out.println(nameFind + "的幸运编号是: " + (i + 1));
}
}
if(!flag){
System.out.println("你输入的姓名有误,不存在"+nameFind+"学生");
}
}
// 快速排序
public static void quicksort(String[] str, int left, int right) {
int dp;
if (left < right) {
dp = partition(str, left, right);
quicksort(str, left, dp - 1);
quicksort(str, dp + 1, right);
}
}
//快速排序的一次分位
public static int partition(String[] subStr, int left, int right) {
String pivot = subStr[left];
while (left < right) {
while (left < right && compareString(subStr[right], pivot) == 1)
right--;
if (left < right)
subStr[left++] = subStr[right];
while (left < right && compareString (subStr[left], pivot) == -1)
left++;
if (left < right)
subStr[right--] = subStr[left];
}
subStr[left] = pivot;
return left;
}
/**
* 字符串比较
* @param str1
* @param str2
* @return
*/
public static int compareString(String str1, String str2) {
int result = 0;
int len1 = str1.length();
int len2 = str2.length();
int minLength = len1 > len2 ? len2 : len1;
int mid = 0;
for (int i = 0; i < minLength; i++) {
char a = str1.charAt(i);
char b = str2.charAt(i);
mid = a - b;
if (mid > 0) {
result = 1;
break;
} else if (mid < 0) {
result = -1;
break;
} else {
continue;
}
}
if (result == 0) {
if (len1 < len2) {
result = -1;
} else if (len1 > len2) {
result = 1;
}
}
return result;
}
}
第二题:
package com.test.bytecal;
import java.util.Scanner;
public class MatrixMultiply {
private static int numSize = 0;
private static int start = 0;
private static int end = 0;
public static void main(String[] args) {
// TODO Auto-generated method stub
//初始化
System.out.println("请输入城市数目,起点和终点: ");
Scanner input = new Scanner(System.in);
numSize = input.nextInt();
start = input.nextInt();
end = input.nextInt();
int[][] matrixPosi = new int[numSize][numSize];
System.out.println("请输入城市路径情况矩阵: ");
for(int i = 0; i < numSize; i++){
for(int j = 0; j < numSize; j++){
matrixPosi[i][j] = input.nextInt();
}
}
//开始计算路径
int pathCoount = 0;
if(matrixPosi[start][end] == 1){
pathCoount ++;
}
if(numSize >= 3){
int mid[][] = multiplication(matrixPosi, matrixPosi);
if(mid[start][end] == 1){
pathCoount ++;
}
for(int i = 3 ; i <= numSize -1; i ++){
int[][] middle = multiplication(mid, matrixPosi);
if(middle[start][end] == 1){
pathCoount ++;
}
}
}
System.out.println("城市" + start +"到城市" + end + ",存在" + pathCoount + "条路径");
}
/**
* 矩阵相乘,利用Floyd算法思想
* @param matrixa
* @param matrixb
* @return
*/
public static int[][] multiplication(int[][] matrixa, int[][] matrixb) {
int[][] result = new int[numSize][numSize];
for(int i=0; i<numSize; i++) {
for(int j=0; j<matrixb[0].length; j++) {
// i will complete this tomorrow @2012/09/17
result[i][j] = calculateSingleResult(matrixa, matrixb, i, j);
}
}
return result;
}
/**
* 矩阵相乘,存贮计算结果,不唯一就是存在row->col的路径
* @param matrixa
* @param matrixb
* @param row
* @param col
* @return
*/
private static int calculateSingleResult(int[][] matrixa, int[][] matrixb, int row, int col) {
int result = 0;
for(int k=0; k<numSize; k++) {
result += matrixa[row][k] * matrixb[k][col];
if (result >= 1) {
return 1;
}
}
return result;
}
}
第三题,看了一下,不是很懂你题目的意思,每往外一层,加一?但是6*6的貌似没有按照这个规则.
追问那个罗马那道题 输入那里有问题 要求输入N行,每行包含N个数字。
你这里得输入N*N行
还有第一行的输入也是 不能用那么多回车。
追答java默认的分隔符是空格,如果你在控制台输入的字符串后面包含空格的话,后面的数字和字符都不会给识别,这种机试题一般是给的文件格式,你也得用读取文件的方式读取。或者你更改分隔符设置成其他的。