nchu-software-oop-2022-2
输入一个由英文字母组成的字符串(大小写均可),将所有英文字母转换成它们在字母表中的序号,例如:“AbbcD”转换为“12234”。
输入格式:
由英文字母组成的字符串(大小写均可)。例如:“AbbcD”
若包含非英文字母,视为非法输入。
输出格式:
所有英文字母转换成它们在字母表中的序号,例如:“12234”。
非法输入输出"Wrong Format".
输入样例:
在这里给出一组输入。例如:
AbbcD
输出样例:
在这里给出相应的输出。例如:
12234
输入样例1:
在这里给出一组输入。例如:
AFOPI
输出样例1:
在这里给出相应的输出。例如:
1615169
输入样例2:
在这里给出一组输入。例如:
c3u
输出样例2:
在这里给出相应的输出。例如:
Wrong Format
思想:先将其转化为小写字母,然后再转成数字。
代码实现:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str;
str = input.next();
int length = str.length();
//check
for(int i=0;i<length;i++){
if(str.charAt(i)<'A' || str.charAt(i)>'z'){
System.out.println("Wrong Format");
return;
}
}
//转化为小写
str = str.toLowerCase();
//转数字
for(int i=0;i<length;i++){
System.out.printf("%d",str.charAt(i)-'a'+1);
}
}
}
RS232是串口常用的通信协议,在异步通信模式下,串口可以一次发送5~8位数据,收发双方之间没有数据发送时线路维持高电平,相当于接收方持续收到数据“1”(称为空闲位),发送方有数据发送时,会在有效数据(5~8位,具体位数由通信双方提前设置)前加上1位起始位“0”,在有效数据之后加上1位可选的奇偶校验位和1位结束位“1”。请编写程序,模拟串口接收处理程序,注:假定有效数据是8位,奇偶校验位采用奇校验。
输入格式:
由0、1组成的二进制数据流。例如:11110111010111111001001101111111011111111101111
输出格式:
过滤掉空闲、起始、结束以及奇偶校验位之后的数据,数据之前加上序号和英文冒号。
如有多个数据,每个数据单独一行显示。
若数据不足11位或者输入数据全1没有起始位,则输出"null data",
若某个数据的结束符不为1,则输出“validate error”。
若某个数据奇偶校验错误,则输出“parity check error”。
若数据结束符和奇偶校验均不合格,输出“validate error”。
如:11011或11111111111111111。
例如:
1:11101011
2:01001101
3:validate error
输入样例:
在这里给出一组输入。例如:
1111011101011111111111
输出样例:
在这里给出相应的输出。例如:
1:11101011
输入样例1:
在这里给出一组输入。例如:
11110111010111111001001101111111011111111101111
输出样例1:
在这里给出相应的输出。例如:
1:11101011
2:01001101
3:validate error
输入样例2:
输入数据不足11位。例如:
111101
输出样例2:
在这里给出相应的输出。例如:
null data
输入样例3:
输入数据全1没有起始位。例如:
1111111111111111
输出样例3:
在这里给出相应的输出。例如:
null data
输入样例4:
输入数据全1没有起始位。例如:
111101110101111111101111111101
输出样例4:
在这里给出相应的输出。例如:
1:11101011
2:parity check error
输入样例5:
两组数据结束符和奇偶校验均不合格。例如:
111000000000000011100000000000000
输出样例5:
在这里给出相应的输出。例如:
1:validate error
2:validate error
输入样例6:
两组数据,数据之间无空闲位。例如:
1110000000001100111000001
输出样例6:
在这里给出相应的输出。例如:
1:00000000
2:01110000
由于对题目的考虑不深,22个测试点有9个没过。所以本题欢迎各位大佬指教,我将我的烂代码贴在下面。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str,shuchu="";
int coun = 0,num=0,count=1,xuhao = 0,jishu = 0;
Scanner input = new Scanner(System.in);
str = input.nextLine();
if(str.length() < 11) {
System.out.println("null data");
return;
}
for(int i=0;i<str.length();i++) {
if(str.charAt(i)=='1') {
count++;
}
if(count == str.length()) {
System.out.println("null data");
return;
}
}
while(num < str.length()) {
if(str.charAt(num)=='1') {
num++;
continue;
}
System.out.println(num);
if(str.charAt(num)=='0') {
if(num+11>str.length()) {
return;
}
else{
xuhao++;
coun = num+1;
for(int j=coun;j<coun+8;j++) {
shuchu+=str.charAt(j);
if(str.charAt(j) == '1') {
jishu++;
}
//System.out.println(jishu);//
}
if(str.charAt(num+10)!='1'||(jishu%2==0&&str.charAt(coun+8)=='0')||(jishu%2 == 1&&str.charAt(coun+8)=='1')) {
System.out.println(xuhao+":validate error");
System.out.println(num);
jishu = 0;
shuchu = "";
return;
//if(){
//System.out.println("parity check error");
//continue;
//}
}
if(str.charAt(num+10)=='1') {
//System.out.println("validate error");
if((jishu%2==0&&str.charAt(coun+8)=='0')||(jishu%2 == 1&&str.charAt(coun+8)=='1')){
System.out.println(xuhao+":parity check error");
jishu = 0;
shuchu = "";
return;
}
}
else {
System.out.println(xuhao+"validate error");
jishu = 0;
shuchu = "";
return;
}
System.out.println(xuhao+":"+shuchu);
num =num+11;
jishu = 0;
shuchu = "";
//System.out.println(num);//
}
}
}
}
}
学校学生学号格式定义如下:
2位年级号+2位学院号+2位班级号+2位序号,如19041103,
编写程序处理用全院学生学号连接起来的长字符串,学院编号为20,包括17、18、19、20四个年级,请从字符串中提取特定两个班级202017班、202061班同学的学号后四位输出,输出编号之间用空格分隔,不换行。
注意:需要排除非法输入。
输入格式:
全院学生学号组成的长字符串(学号之间无分隔)
学号格式定义如下:
2位年级号+2位学院号+2位班级号+2位序号,如19041103,
输出格式:
特定两个班级202017班、202061班同学的学号后四位
如:1701 6103 1704
输入样例1:
在这里给出一组输入。例如:
2020610120201702202051132020110320201706
输出样例1:
在这里给出相应的输出。例如:
6101 1702 1706
输入样例2(第一个学号多输入一位):
在这里给出一组输入。例如:
20206100120201702202051132020110320201706
输出样例2:
在这里给出相应的输出。例如:
Wrong Format
输入样例3(第一个学号少输入一位数字):
在这里给出一组输入。例如:
202061120201702202051132020110320201706
输出样例3:
在这里给出相应的输出。例如:
Wrong Format
输入样例3(学号之间有空格):
在这里给出一组输入。例如:
2020610120201702 202051132020110320201706
输出样例3:
在这里给出相应的输出。例如:
Wrong Format
首先使用for循环判断str.charAt(i)是否合法然后使用str.length()%8!=0判断其输入长度是否正确,在进行后续判断。
代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String str;
Scanner input = new Scanner(System.in);
str = input.next();
for(int i=0;i<str.length();i++){
if(str.charAt(i) < '0'||str.charAt(i) > '9'||str.charAt(i) == ' '){
System.out.println("Wrong Format");
return;
}
}
if(str.length()%8!=0) {
System.out.println("Wrong Format");
return;
}
else {
int start;
boolean falg = false;
for(start = 0;start<str.length();start+=8) {
if(str.substring(start,start+6).equals("202017")||str.substring(start,start+6).equals("202061")) {
if(falg == true){
System.out.print(" ");
}
System.out.print(str.substring(start+4,start+8));
falg = true;
}
}
}
}
}
浙公网安备 33010602011771号