1. 删除字符串
import java.io.BufferedInputStream;
import java.util.Scanner;
/*
* @author sunzhanpeng
* @date 2015年9月14日21:45:50
*/
//删除字符串中重复的字符,并按ACSII码从小到大排序
public class HW1 {
private static Scanner in = new Scanner(new BufferedInputStream(System.in));
public String compressort(String s){
StringBuffer sb = new StringBuffer();
boolean[] letters = new boolean[256];
char[] sa = s.toCharArray();
for(char c:sa){
letters[c] = true;
}
for(int i=0;i<letters.length;i++){
if(letters[i]==true){
sb.append((char)(i));
}
}
return sb.toString();
}
public static void main(String[] args) {
// String s = "5551DDD233AABC4";
HW1 h = new HW1();
while(in.hasNext()){
String s = in.nextLine();
System.out.println(h.compressort(s));
}
}
}
2.
<pre name="code" class="java">import java.io.BufferedInputStream;
import java.util.Scanner;
import edu.princeton.cs.algs4.SleepSort;
/*
* @author sunzhanpeng
* @date 2015年9月14日21:46:12
*
* //身份证号 18位,
* 最后一位为数字或小写英文字母,
*前17都为数字,
*7-14位为年月日信息
*
*年份大于1900,小于2100. 闰年:能被4整除且不能被100整除的年份,或者能被400整除的年份,闰年2月为29天,非闰年为28天
*
*输入多行字符串,每行一个身份证号,0表示结束,不用处理
*
*每个身份证号的合法性判断,输出一个整数:
*1)如果身份证号合法,输出0
*2)如果身份证号长度不合法,输出1
*3)如果身份证号1-17位含有非数字的字符,输出2
*4)如果身份证号第18位既不是数字也不是x,则输出3
*5)如果身份证号年份非法,输出4
*6)如果身份证号月份非法,输出5
*7)如果身份证号日信息非法,输出6(注意闰年的情况)
*8) 出成功情况外的 1-6优先级依次递减
*/
public class HW2 {
private static Scanner in = new Scanner(new BufferedInputStream(System.in));
public int isValidNum(String s){
//如果身份证号长度不合法,输出1
if(s.length() != 18){
return 1;
}
//如果身份证号1-17位含有非数字的字符,输出2
for(int i=0; i<17; i++){
if(s.charAt(i)>'9' || s.charAt(i)<'0'){
return 2;
}
}
//如果身份证号第18位既不是数字也不是x,则输出3
if(s.charAt(17) != 'x' && (s.charAt(17)>'9' || s.charAt(17)<'0')){
return 3;
}
//如果身份证号年份非法,输出4
int year = Integer.parseInt(s.substring(6, 10));
if( year< 1900 || year>2100){
return 4;
}
//如果身份证号月份非法,输出5
int month = Integer.parseInt(s.substring(10, 12));
if( month > 12 ||month < 1){
return 5;
}
//如果身份证号日信息非法,输出6(注意闰年的情况)
int day = Integer.parseInt(s.substring(12, 14));
if( day> 31 || day < 1){
return 6;
}
//处理30天的情况
if(month ==4 || month==6|| month == 9|| month== 11){
if(day>30 || day <1){
return 6;
}
}
if(year %100 == 0 ){
if(year%400 == 0){
//run
if(month==2){
if(day>29 || day<1){
return 6;
}
}
}
}else {
if(year%4 ==0){
//run
if(month==2){
if(day>29 || day<1){
return 6;
}
}
}else {
//fei run
if(month == 2){
if(day >28 || day <1){
return 6;
}
}
}
}
return 0;
}
public static void main(String[] args) {
HW2 h = new HW2();
while(in.hasNextLine()){
String s = in.nextLine();
System.out.println(h.isValidNum(s));
}
}
}
3.
import java.io.BufferedInputStream;
import java.util.Scanner;
public class HW3 {
private String str = "23456789ABCDEFGHJKLMNPQRSTUVWXYZ";
private static Scanner in = new Scanner(new BufferedInputStream(System.in));
public String procdkey(String s){
//32个字符表
char[] base = str.toCharArray();
//从字符串中读出3个正整数
String[] nums = s.split(" ");
//前14位
StringBuffer sb14 = new StringBuffer();
int[] num = new int[nums.length];
for (int i = 0; i < num.length; i++) {
num[i] = Integer.valueOf(nums[i]);
}
//正整数转为bit,并逆序
String s1 = buqicut(num[0]);
String s2 = buqicut(num[1]);
String s3 = buqicut(num[2]);
//组合成48bit
String base1 = s3+s2+s1;
//再贴一个,14*5=70,再加一个足够用
base1 = base1 + base1;
//循环转换下表用的
String[] xiabiao = new String[14];
for(int m=0;m<xiabiao.length; m++){
xiabiao[m] = "";
}
for(int i=0; i<14; i++){
for(int j=i*5; j<(i+1)*5; j++){
xiabiao[i] += base1.charAt(j);
}
}
int [] xiab = new int[14];
for (int i = 0; i < xiab.length; i++) {
xiab[i] = Integer.parseInt(xiabiao[i], 2);
}
for(int i=0;i<14;i++){
if((i+1)%4 == 0){
sb14.append(base[xiab[i]]);
sb14.append('-');
}else {
sb14.append(base[xiab[i]]);
}
}
//取最后两位YY
int asche = 0;
for(int i=0;i<14;i++){
asche += (int)(base[xiab[i]]);
}
String s4 = buqiyycut(asche);
String[] s15 = new String[2];
for(int m=0;m<s15.length; m++){
s15[m] = "";
}
for(int i=0; i<2;i++){
for(int j=i*5; j<(i+1)*5; j++){
s15[i] += s4.charAt(j);
}
}
int [] xiab2 = new int[2];
for (int i = 0; i < xiab2.length; i++) {
xiab2[i] = Integer.parseInt(s15[i], 2);
}
for(int i=0;i<2;i++){
sb14.append(base[xiab2[i]]);
}
return sb14.toString();
}
//取低16bit,并翻转
public String buqicut(int n){
String bc = Integer.toBinaryString(n);
if(bc.length() >= 16){
bc = bc.substring(bc.length() -16);
}else {
int toadd = 16-bc.length();
StringBuffer fore = new StringBuffer();
for(int i=0; i<toadd; i++){
fore.append('0');
}
bc = fore+bc;
}
return new StringBuilder(bc).reverse().toString();
}
//取低10bit,并翻转
public String buqiyycut(int n){
String bc = Integer.toBinaryString(n);
if(bc.length() >= 10){
bc = bc.substring(bc.length() -10);
}else {
int toadd = 10-bc.length();
StringBuffer fore = new StringBuffer();
for(int i=0; i<toadd; i++){
fore.append('0');
}
bc = fore+bc;
}
return new StringBuilder(bc).reverse().toString();
}
public static void main(String[] args) {
// System.out.println(Integer.toBinaryString(65520));
// String s = "127";
// while(in.hasNextLine()){
// s = in.nextLine();
// String[] nums = s.split(" ");
// int[] num = new int[nums.length];
// for (int i = 0; i < num.length; i++) {
// num[i] = Integer.valueOf(nums[i]);
// System.out.println(num[i]);
// }
// }
// s = s.substring(s.length() - 5);
// System.out.println(s);
// HW3 h = new HW3();
// System.out.println(h.buqicut(127));
// System.out.println(Integer.parseInt("11111111", 2));
HW3 h = new HW3();
while(in.hasNextLine()){
String s = in.nextLine();
System.out.println(h.procdkey(s));
}
}
}