【java_蓝桥杯算法训练】算法训练三
手机尾号评分
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!
给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。
这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:
1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。
2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。
3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。
4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。
尾号最终得分就是每条标准的加分总和!
要求程序从标准输入接收数据,在标准输出上输出结果。
输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。
输出格式为:n行整数。
例如,输入:
14
3045
0211
2345
6543
7777
8888
7878
7788
6688
2424
2244
9918
6789
8866
则输出:
0
0
5
6
8
12
3
3
5
1
1
3
8
5
给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。
这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:
1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。
2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。
3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。
4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。
尾号最终得分就是每条标准的加分总和!
要求程序从标准输入接收数据,在标准输出上输出结果。
输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。
输出格式为:n行整数。
例如,输入:
14
3045
0211
2345
6543
7777
8888
7878
7788
6688
2424
2244
9918
6789
8866
则输出:
0
0
5
6
8
12
3
3
5
1
1
3
8
5
import java.util.Scanner;
import javax.naming.directory.SchemaViolationException;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*30年的改革开放,给中国带来了翻天覆地的变化。2011全年中国手机产量约为11.72亿部。手机已经成为百姓的基本日用品!
给手机选个好听又好记的号码可能是许多人的心愿。但号源有限,只能辅以有偿选号的方法了。
这个程序的目的就是:根据给定的手机尾号(4位),按照一定的规则来打分。其规则如下:
1. 如果出现连号,不管升序还是降序,都加5分。例如:5678,4321都满足加分标准。
2. 前三个数字相同,或后三个数字相同,都加3分。例如:4888,6665,7777都满足加分的标准。注意:7777因为满足这条标准两次,所以这条规则给它加了6分。
3. 符合AABB或者ABAB模式的加1分。例如:2255,3939,7777都符合这个模式,所以都被加分。注意:7777因为满足这条标准两次,所以这条标准给它加了2分。
4. 含有:6,8,9中任何一个数字,每出现一次加1分。例如4326,6875,9918都符合加分标准。其中,6875被加2分;9918被加3分。
尾号最终得分就是每条标准的加分总和!
要求程序从标准输入接收数据,在标准输出上输出结果。
输入格式为:第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。
输出格式为:n行整数。
*/
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int arr[]=new int[n];
int arr1[]=new int[n];
for (int i = 0; i < arr.length; i++) {
arr[i]=sc.nextInt();
}
for (int i = 0; i < arr.length; i++) {
String s;
if(arr[i]<=999&&arr[i]>=100) {
s="0"+arr[i];
}else if(arr[i]<=99&&arr[i]>=10) {
s="00"+arr[i];
}
else if(arr[i]<=9&&arr[i]>=0) {
s="000"+arr[i];
}
else {
s=arr[i]+"";
}
int count=0;
// 判断条件1
if((s.charAt(0)==s.charAt(1)-1&&s.charAt(1)==s.charAt(2)-1&&s.charAt(2)==s.charAt(3)-1)
||(s.charAt(0)==s.charAt(1)+1&&s.charAt(1)==s.charAt(2)+1&&s.charAt(2)==s.charAt(3)+1)){
count+=5;
}
// 判断条件2
if(s.charAt(0)==s.charAt(1)&&s.charAt(1)==s.charAt(2)&&s.charAt(2)==s.charAt(0)) {
count+=3;
}
if(s.charAt(3)==s.charAt(2)&&s.charAt(2)==s.charAt(1)&&s.charAt(1)==s.charAt(3)) {
count+=3;
}
// 判断条件3
if(s.charAt(0)==s.charAt(1)&&s.charAt(2)==s.charAt(3)) {
count+=1;
}
// abab
if(s.charAt(0)==s.charAt(2)&&s.charAt(1)==s.charAt(3)) {
count+=1;
}
// 判断条件4
if(s.charAt(0)=='8'||s.charAt(0)=='6'||s.charAt(0)=='9') {
count++;
} if(s.charAt(1)=='8'||s.charAt(1)=='6'||s.charAt(1)=='9') {
count++;
}
if(s.charAt(2)=='8'||s.charAt(2)=='6'||s.charAt(2)=='9') {
count++;
}
if(s.charAt(3)=='8'||s.charAt(3)=='6'||s.charAt(3)=='9') {
count++;
}
arr1[i]=count;
}
for (int i = 0; i < arr1.length; i++) {
System.out.println(arr1[i]);
}
}
}
时间转换
资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
给定一个以秒为单位的时间t,要求用“<H>:<M>:<S>”的格式来表示这个时间。<H>表示时间,<M>表示分钟,而<S>表示秒,它们都是整数且没有前导的“0”。例如,若t=0,则应输出是“0:0:0”;若t=3661,则输出“1:1:1”。
输入格式
输入只有一行,是一个整数t(0<=t<=86399)。
输出格式
输出只有一行,是以“<H>:<M>:<S>”的格式所表示的时间,不包括引号。
样例输入
0
样例输出
0:0:0
样例输入
5436
样例输出
1:30:36
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
int i=sc.nextInt();
int h=0,m=0,s=0;
h=i/3600;
i=i-(3600*h);
m=i/60;
i-=60*m;
s=i;
System.out.println(h+":"+m+":"+s);
}
}
查看28道真题和解析