最近做了几个机试题,分享一下。
1. 要求打印出来的符合下列规律,n=4时
1*2*3*4
9*10*11*12
13*14*15*16
5*6*7*8
<span style="font-size:18px;">public class SquarePattern {
// METHOD SIGNATURE BEGINS, THIS METHOD IS REQUIRED
public static void squarePatternPrint(int n) {
// INSERT YOUR CODE HERE
if (n == 0)
return;
for (int k = 1; k <= n; k++) {
if (k % 2 == 1)
print(n, k);
}
for (int k = n; k >= 1; k--) {
if (k % 2 == 0)
print(n, k);
}
}
/*
* k代表的是打印的第几行
*/
public static void print(int n, int k) {
for (int i = (k - 1) * n + 1; i <= k * n; i++) {
if (i % n == 0) {
System.out.print(i);
System.out.println();
} else {
System.out.print(i + "*");
}
}
}
// METHOD SIGNATURE ENDS
public static void main(String[] args) {
squarePatternPrint(4);
}
}</span>
2 模拟内存页面置换算法LUR
import java.util.LinkedList;
import java.util.Queue;
public class LRu {
Queue<Integer> que=new LinkedList<>();;//模拟页面'寄存器'
private int size;//寄存器大小,表示一共可装入多少页面
public LRu(int size) {
que = new LinkedList<>();
this.size = size;
}
//LRU算法简单实现,返回一共未命中的次数
public int lru(int[] pageNumbers)
{
if(size <= 0 || pageNumbers == null)
throw new IllegalArgumentException("illegal arugments");
if(pageNumbers.length <= size)
return pageNumbers.length;
int unhit = 0;
for(int i = 0; i < pageNumbers.length; i++)
{
int index = isHit(pageNumbers[i]);
if(index == -1)
unhit = processUnHit(pageNumbers[i], unhit);
else
{
processHit(pageNumbers[i]);
}
}
return unhit;
}
/**
*
* @param pageNumber 判断 pageNumber是否hit
* @return -1 表示 unhit, 其他表示hit
*/
private int isHit(int pageNumber){
return ((LinkedList<Integer>) que).indexOf(pageNumber);
}
/**
* 当栈未满时,未命中的页面号直接入栈;栈满时,需要替换页面,先选中一个页面(栈底)删除,然后Push新页面
* @param pageNumber 未命中的页面号
* @param count 当前未命中次数
* @return 更新后的未命中的次数
*/
private int processUnHit(int pageNumber, int count){
if(isFull())
que.remove();//删除最久未访问的页面
que.add(pageNumber);//放入最近访问的页面
count++;//未命中的次数加1
return count;
}
//处理命中的情况
private void processHit(int pageNumber){
que.remove();
que.add(pageNumber);
}
//判断'寄存器'栈是否已经满了
private boolean isFull()
{
if(que.size() < size)
return false;
else
return true;
}
//test
public static void main(String[] args) {
int[] pageNumbers = {1,2,1,3,1,2};
int size = 2;
LRu lru = new LRu(size);
System.out.println(lru.lru(pageNumbers));
}
}