1.信息熵(Entropy)
public class Main {
public static void main(String[] args) {
String str = StdIn.readAll();
//大写转小写
str = str.toLowerCase();
int sum = 0;
double e = 0.0d;
int [] arr = new int[26];
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch >= 'a' && ch <= 'z') {
arr[ch-'a']++;
sum ++;
}
}
for (int i = 0; i < arr.length; i++) {
double d = 1.0*arr[i] / sum;
if (d > 0) {
e += -(d*Math.log(d)/Math.log(2));
}
}
StdOut.printf("%4.2f\n",e);
}
}
2.正龙拍虎与数码相片
import java.io.BufferedInputStream;
import com.drew.imaging.jpeg.JpegMetadataReader;
import com.drew.imaging.jpeg.JpegProcessingException;
import com.drew.metadata.Directory;
import com.drew.metadata.Metadata;
import com.drew.metadata.exif.ExifDirectory;
public class Main {
public static void main(String[] args) {
try {
Metadata metadata = JpegMetadataReader.readMetadata(new BufferedInputStream(System.in));
Directory exif = metadata.getDirectory(ExifDirectory.class);
String cameraMake = exif.getString(ExifDirectory.TAG_MAKE);
String cameraModel = exif.getString(ExifDirectory.TAG_MODEL);
String tagFocalLength = exif.getString(ExifDirectory.TAG_FOCAL_LENGTH);
String tagFnumber = exif.getString(ExifDirectory.TAG_FNUMBER);
String tagDatetimeOriginal = exif.getString(ExifDirectory.TAG_DATETIME_ORIGINAL);
System.out.println(cameraMake);
System.out.println(cameraModel);
System.out.println(tagFocalLength);
System.out.println(tagFnumber);
System.out.println(tagDatetimeOriginal);
} catch (JpegProcessingException e) {
e.printStackTrace();
}
}
}
3.编辑距离
public class Main {
public static void main(String[] args) {
String s1 = StdIn.readLine();
String s2 = StdIn.readLine();
int result = -1;
int s1Len = s1.length();
int s2Len = s2.length();
int[][] arrayOfInt = new int[s1Len + 1][s2Len + 1];
if (s1.equals(s2)) {
result = 0;
}else if(s1Len == 0 ){
result = s2Len;
}else if(s2Len == 0 ){
result = s1Len;
}else{
for (int i = 0; i <= s1Len; i++) {
arrayOfInt [i][0] = i;
}
for (int j = 0; j <= s2Len; j++) {
arrayOfInt [0][j] = j;
}
for (int i = 1; i <= s1Len; i++) {
for (int j = 1; j <= s2Len; j++) {
if(s1.charAt(i-1) == s2.charAt(j - 1)){
arrayOfInt[i][j] = arrayOfInt[i-1][j-1];
}else{
int min = arrayOfInt[i-1][j]+1;
if (arrayOfInt[i][j-1]+1 < min ) {
min = arrayOfInt[i][j-1]+1;
}
if(arrayOfInt[i-1][j-1]+1 < min){
min = arrayOfInt[i-1][j-1]+1;
}
arrayOfInt[i][j] = min;
}
}
}
result = arrayOfInt[s1Len][s2Len];
System.out.println(result);
}
}
}