1.第一题:
输入的第一行是一个整数N,表示接下来有N行(就是一个学生打了N次菜),每一行是3个数据,分别是一个字符–>表示食物的类型(M是肉、V是蔬菜、R是主食,主食有200克的免费额度,多于200克的话先买的先免费、S代表汤)、一个int–>表示打了多少克菜、一个float-- >表示这个菜的单价(元/100克)。
然后第N+2行还有一个float代表这个学生打好饭之后吃饭的桌子,这个桌子总的食物剩余率,如果剩余率P在(0,0.2)之间,那么这个学生的总价格就可以优惠0.2-P。
然后是输入样例,大概是这样:
5
M 100 3.00
V 100 2.00
M 200 2.00
R 150 2.00
S 100 0.00
0.1
输出:8.10(保留小数点后面2位)
实际的描述比这还要复杂,是一个什么智能餐盘和智能餐台的模拟来着
然后是第二题:
输入两个整数a和b,要你返回一个序列,这个序列有10个数据,每个数据是前两个数据的乘积,如果这个数据超过了5位数,那这个数据和后面的所有数据都是0。
输入样例:
4 8
输出样例:
32 256 8192 0 0 0 0 0 0 0
然后是第3题:
先输入两个整数N和K,N表示数组的长度,K表示第K个元素(从1开始数),然后第二行就是这N个数据。
然后就是要按题目要求进行变换:
首先,把这个数组从1到K按照由小到大排序,从K到N按照由大到小排序
然后对着两个部分的每个部分进行二分排序,具体是对于某一个部分,将它的前一步按从小到大排序,将它的后一半按照从大到小排序,一半的取值向上取整(从测试用例可以看出),然后对每一半再次调用这个方法。
输入样例:
10 5
1 2 3 4 5 6 7 8 9 10
输出样例:
1 2 3 5 4 8 9 10 7 6
没什么好说的,就是考前粘贴了一个从大到小的冒泡排序算法,可是这个算法是对一整个数组进行排序的,我需要改写成对从left到right-1进行排序。所以对于二重循环的终止条件磨蹭了半天。
然后这题是我最后写的一题,代码还在Main类里,粘贴出来如下:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt(),k=scanner.nextInt();
int[] data=new int[n];
for (int i=0;i<n;i++){
data[i]=scanner.nextInt();
}
xiaoToda(data,0,k);
daToxiao(data,k,n);
erfen(data,0,k-1);
erfen(data,k,n-1);
for (int i=0;i<n;i++)
System.out.printf("%d ",data[i]);
}
private static void erfen(int[] data,int left,int right) {
int half=(right-left+1)/2+1;
if (half==1||half==2)return;
xiaoToda(data,left,left+half);
daToxiao(data,left+half,right+1);
erfen(data,left,left+half-1);
erfen(data,left+half,right);
}
public static void daToxiao(int[] arr,int index,int length){
int temp;
for(int i=index;i<length;i++){
for(int j=index;j<length-(i-index)-1;j++){
if(arr[j]<arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
public static void xiaoToda(int[] arr,int index,int length){
int temp;
for(int i=index;i<length;i++){
for(int j=index;j<length-(i-index)-1;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
第4题:
输入是一行字符串(长度<=200),它描述了单链表的形态,第二行是一个int表示第A个结点,要你输出两个整数,分别表示这个结点到首节点和到尾节点的距离
输入样例:
[node1->node2][node3->node4][node2->node3]
2
输出样例:
1 3
这题是用hash表和类似并查集的思路就能写出来,但是首先要对字符串用正则表达式进行预处理,我不会啊。在split的模式匹配字符串里填了几次也截取不出东西就放弃了,明明看了正则表达式的入门视频还是不会用,唉。
第5题:
这题是什么鬼啊喂(#`O′),随便来个最短路径就行了把,这题比最短路径还要难1.5倍的样子,根本没有思路
题目第一行输入3个东西,一个int N,表示接下来有N行,每行表示一条公交路线图、一个字符串表示起始站点、还有一个字符串表示目的站点。要求你输出一个整数表示起始站点到目的站点的距离
输入样例:
4 A3 C3
A1 A2 A3
C1 C2 C3 C4
A2 B1 C2 D1
A2 C3
输出样例:
3
这题怎么做嘛,是要用邻接矩阵还是关联矩阵,A1是一个字符串怎么把它映射成二维数组的下标嘛。对于这种没学过的题目也就不指望能拿分了,事后涨涨见识就行了。
第6题
先输入一个int N,表示公司有N个员工,然后是不知道多少行,每行两个int a和b,表示a号员工和b号员工是好朋友,以两个0表示输入完毕。现在公司要玩“铁三角”的游戏,随机选出3明员工,让你输出一个int,表示这3名员工两两互为好朋友的情况有多少种?
输入样例:
忘记了
反正这题可以用邻接矩阵来做,然后3重for循环,还要用一个大小为N+N-1+N-2+1的哈希表来避免123和132算两种情况。