第一题:
1.1题目描述
一副扑克牌去掉大小王,数值大小为从1到13(1>13),花色大小为从4到1(1<4);
炸弹大于对子,对子大于单张,同样数值按花色大小排序
若一个数值有三张,则花色小的两张组成对子,花色大的组成单张
时间限制1000ms
输入:
第一行为扑克牌总数
后面每行为 “花色 大小”
输出:
按顺序,先输出所有炸弹,再输出所有对子,最后输出所有单张
例如:
1 2 炸弹
2 2
3 2
4 2
1 1 对1
3 1
4 1 单张1
1 3 单张3
3 6 单张6
4 13 单张13
1.2解题办法:
package com.example.bishi;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class cards {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
//10
//1 4
//2 4
//3 4
//4 4
//2 3
//4 3
//1 7
//2 7
//3 7
//1 1
int nums=Integer.parseInt(sc.nextLine());
String[] cards=new String[52];
Map<Integer,Integer> hashtable=new TreeMap<Integer,Integer>();
for(int i=0;i<nums;i++){
String info=sc.nextLine();
int color=Integer.parseInt(info.split(" ")[0]);
int value=Integer.parseInt(info.split(" ")[1]);
hashtable.put(value,hashtable.containsKey(value)?hashtable.get(value)+1:1);
cards[(value-1)*4+color-1]=info;
}
for(Integer key: hashtable.keySet()){
//System.out.println(key+":"+hashtable.get(key));
if(hashtable.get(key)==4){
for(int j=(key-1)*4;j<(key-1)*4+4;j++)
{
System.out.println(cards[j]);
cards[j]=null;
}
}
}
for(Integer key: hashtable.keySet()){
if(hashtable.get(key)==2||hashtable.get(key)==3){
int count=0;
for(int j=(key-1)*4;j<(key-1)*4+4;j++)
{
if(cards[j]!=null&&count<2){
System.out.println(cards[j]);
cards[j]=null;
count++;
}
}
}
}
for(int k=0;k<cards.length;k++){
if(cards[k]!=null){
System.out.println(cards[k]);
}
}
}
}
暴力求解,不知道正确率,考试的时候没有写出来。
第二题:
2.1题目描述
输入:
1行: “m n”,m为地图行数,n为地图列数
2~m+1行 长度为n的字符串,为每格地形
m+2行: ‘x y’,x为宝藏初始横坐标,y为宝藏初始纵坐标
m+3行: “number” 行动次数
时间限制2000ms
字符串有六种字符,各自为
'.'空地,到达此处后不会再更改位置
'#'障碍,无法到底此处,若目的地障碍处则不移动
'^'向上走
'v'向下走
'<'向左走
'>'向右走
宝藏不会超出边界,若下一步超出边界则停留在原位置
输出:
宝藏最终位置
例:
输入
"3 4"
">>v."
">v<>"
"#.><""0 0"
"10000"
输出:
2 1
2.2解题思路
以下是我考试的时候的代码,通过率仅仅45%。给出的测试数据,都过了,但是后台智能通过45%。导致我一直在想哪儿有错,最后时间都花在这个上面。有大佬有好的解法,希望能分享给我一下。
我最开始的代码,没有闭环,完全模拟,通过率是15%。后来加了><这种相连的情况,变成了45%。一直在那儿思考,闭环的情况怎么做。
import java.util.*;
public class kaoshi {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String[] nums=sc.nextLine().split(" ");
int n=Integer.parseInt(nums[0]);
int m=Integer.parseInt(nums[1]);
char[][] dp=new char[n][m];
for(int i=0;i<n;i++){
char[] strs=sc.nextLine().toCharArray();
for(int j=0;j<m;j++){
dp[i][j]=strs[j];
}
}
String[] start=sc.nextLine().split(" ");
int starti=Integer.parseInt(start[0]);
int startj=Integer.parseInt(start[1]);
int k=sc.nextInt();
while(k>0){
//空地
if(dp[starti][startj]=='.'){
System.out.println(starti+" "+startj);
break;
}
//上
else if(dp[starti][startj]=='^'){
if(starti-1<0){
System.out.println(starti+" "+startj);
break;
} else if(dp[starti-1][startj]=='#'){
System.out.println(starti+" "+startj);
break;
}else if(dp[starti][startj-1]=='v'){
if(k%2==0){
System.out.println(starti+" "+startj);
break;
}else{
System.out.println((starti-1)+" "+startj);
break;
}
}else{
starti--;
k--;
}
}
//下
else if(dp[starti][startj]=='v'){
if(starti+1>n-1){
System.out.println(starti+" "+startj);
break;
} else if(dp[starti+1][startj]=='#'){
System.out.println(starti+" "+startj);
break;
}else if(dp[starti+1][startj]=='^'){
if(k%2==0){
System.out.println(starti+" "+startj);
break;
}else{
System.out.println((starti+1)+" "+startj);
break;
}
}
else{
starti++;
k--;
}
}
//左
else if(dp[starti][startj]=='<'){
if(startj-1<0){
System.out.println(starti+" "+startj);
break;
}else if(dp[starti][startj-1]=='#'){
System.out.println(starti+" "+startj);
break;
}else if(dp[starti][startj-1]=='>'){
if(k%2==0){
System.out.println(starti+" "+startj);
break;
}else{
System.out.println(starti+" "+(startj-1));
break;
}
}
else{
startj--;
k--;
}
}
//右
else if(dp[starti][startj]=='>'){
if(startj+1>m-1){
System.out.println(starti+" "+startj);
break;
}else if(dp[starti][startj+1]=='#'){
System.out.println(starti+" "+startj);
break;
}else if(dp[starti][startj+1]=='<'){
if(k%2==0){
System.out.println(starti+" "+startj);
break;
}else{
System.out.println(starti+" "+(startj+1));
break;
}
} else{
startj++;
k--;
}
}
}
if(k==0){
System.out.println(starti+" "+startj);
return;
}
}
}
第三题:
3.1题目描述:
名字匹配
zhang xu,Zhang xu xu,zhaxu
与zhx匹配
匹配成功的是zhang xu
输入:
第一行:所有联系人,逗号分割,"zhang han,zhang san,zhang han su"
第二行:目标联系人缩写"zhs"
输出:符合第二行字符缩写的联系人。如“zhang san”(zh+s) “zhang han su”(z+h+s)