Java练习题

打印沙漏

写程序把给定数量的符号打印成最大沙漏的形状,并输出剩余的符号个数。例如给定17个“*”,要求按下列格式打印  

*****
\***/
||*||
/***\
*****

“沙漏形状”,是指每行输出奇数个输入的特定符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。分别使用\和/填补两侧。特定符号个数为1时,使用'|'填补两侧。

给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。

输入格式:

输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数

输入 38 *

******* 
\*****/ 
\\***// 
|||*||| 
//***\\ 
/*****\ 
*******
7
import java.util.Scanner;

public class Main {
	public static void main(String [] arg){
		//在此实现测试代码
		Scanner scanner=new Scanner(System.in);
		int num=scanner.nextInt();
		char zm=scanner.next().charAt(0);
		int line=0;
		for(int i=0;num>=2*i-1;)
		{
			line++;
			i=line*line;
		}
		line--;
		
		int max=2*line-1;
		int tem=max;
		while(tem>0)
		{
			if(tem==1)
			{
				for(int i=0;i<(max-tem)/2;i++)
				{
					System.out.print('|');
				}
			}
			else {
				for(int i=0;i<(max-tem)/2;i++)
				{
					System.out.print('\\');
				}
			}
			for(int i=0;i<tem;i++)
			{
				System.out.print(zm);
			}
			if(tem==1)
			{
				for(int i=0;i<(max-tem)/2;i++)
				{
					System.out.print('|');
				}
			}
			else {
			for(int i=0;i<(max-tem)/2;i++)
			{
				System.out.print('/');
			}
			}
			System.out.print("\n");
			tem-=2;
		}
		tem=3;
		while(tem<=max)
		{
			for(int i=0;i<(max-tem)/2;i++)
			{
				System.out.print('/');
			}
			for(int i=0;i<tem;i++)
			{
				System.out.print(zm);
			}

			for(int i=0;i<(max-tem)/2;i++)
			{
				System.out.print('\\');
			}
			System.out.print("\n");
			tem+=2;
		}
		System.out.print(num-2*line*line+1);
	}
}

3D福彩

package Main;
import java.util.Random;
import java.util.Scanner;
import java.beans.IndexedPropertyDescriptor;
import java.security.DrbgParameters.NextBytes;
import java.util.Arrays;

abstract class Lottery {
	protected int winNumber[];
	protected int userNumber[];
	protected String userInput;

	Lottery() {
		winNumber = createWinNumber();
	}
	//在报告用不到
	Lottery(String s){
		winNumber=createWinNumber(s);
	}
	
	//生成随机中奖号
	int[] createWinNumber() {
		int[] winnu = new int[3];
		Random rd = new Random();
		for (int i = 0; i < 3; i++) {
			winnu[i] = rd.nextInt(10);
		}
		return winnu;
	}
	//在报告用不到
	int[] createWinNumber(String s) {
		int[] winnu = new int[3];
		try {
			Integer i = Integer.valueOf(s);
			if (i >= 0 && i < 1000) {
				for (int j = 0; j < 3; j++) {
					winnu[2 - j] = i % 10;
					i = i / 10;
				}
				return winnu;
			} 
			else
				return winnu;
		} 
		catch (Exception e) {
			return null;
		}
	}
	
	public boolean ifNumRight(String b) {
		boolean right = false;
		Integer i = Integer.valueOf(b);
		if (i>=0&&i<=999)
			right=true;
		return right;
	}
	
	public void getUserInput() {
		System.out.println("请输入0-999之间的整数");
		Scanner s=new Scanner(System.in);
		String str=s.next();
		while(!ifNumRight(str))
		{
			System.out.println("请输入正确的投注内容");
			str=s.next();
		}
		str = str.trim();
		userNumber= new int [3];
		userInput = str;
		for (int i = 0; i < 3; i++) 
		{
			char digitChar = str.charAt(i); 
			userNumber[i] = Character.getNumericValue(digitChar); 
		}
	}

	abstract int getwinlevel(int[] winnumber, String s);

	int getwinlevel() {
		return getwinlevel(this.winNumber, this.userInput);
	}
	int getwinlevel(String s) {
		return getwinlevel(this.winNumber,s);
	}

	public void setUserNumber(int[] userNumber) {
		this.userNumber = userNumber;
	}
	
	public void printwinNumber() {
		for(int i:winNumber)
		{
			System.out.print(i+' ');
		}
	}

}

class Group extends Lottery {
	Group(String s) {
		super(s);
	}
	Group() {
		super();
	}
	
	int[] arrange(int[] winnumber) {
		int[] newwinnumber = Arrays.copyOf(winnumber, winnumber.length);
		Arrays.sort(newwinnumber);
		return newwinnumber;
	}

	@Override
	int getwinlevel(int[] winnumber, String s) {
		int[] newwinnumber = arrange(winnumber);
		int[] newuserinput = arrange(this.userNumber);
		int maxequal = 0;
		int currequal = 0;
		for (int i = 0; i < newwinnumber.length - 1; i++) {
			if (newwinnumber[i] == newwinnumber[i + 1]) {
				currequal++;
				if (currequal > maxequal) {
					maxequal = currequal;
				}
			} else
				currequal = 0;
		}
		boolean equals = true;

		for (int i = 0; i < newwinnumber.length - 1; i++) {
			if (newwinnumber[i] != newuserinput[i]) {
				equals = false;
				break;
			}
		}
		if (equals) {
			switch (maxequal) {
			case 0:
				return 173;
			case 1:
				return 346;
			default:
				return 0;
			}
		} else
			return 0;
}

class Single extends Lottery {
	Single(String s) {
		super(s);
	}
	Single() {
		super();
	}
	@Override
	int getwinlevel(int[] winnumber, String s) {
			boolean win = false;
			for (int i = 0; i < userNumber.length; i++) {
				if (userNumber[i] == winnumber[i]) {
					win = true;
				} 
				else {
					win = false;
					break;
				}
			}
			if (win) {
				return 1040;

			} 
			else
				return 0;
	}

}

public class test {

	public static Lottery getusertype(String s) {
		Lottery l=null;
		switch (s) {
		case "group":
			l=new Group();
			break;
		//case "single":
		//	l = new Single();
			//break;
		}
		return l;
	}
	
	public static boolean ifType(String a) {
		String[] Type = {"single", "group", "oned", "guess1d", "towd","sum"};
		boolean found = false;
		for (String str : Type) 
		{
		    if (a.equals(str)) {
		        found = true;
		        break;
		    }
		}
		return found;
	}
	
	public static void Main(String[] arg) {
		System.out.println("请输入投注方式:");
		Scanner s=new Scanner(System.in);
		String type=s.next();
		while(!ifType(type))
		{
			System.out.println("您输入的投注方式不存在,请重新输入:");
			type=s.next();
		}
	
		Lottery l;
		l=getusertype(type);
		System.out.print("中奖号为:");
		l.printwinNumber();
		
		l.getUserInput();
		int curr=l.getwinlevel();
		System.out.print("您获得的奖金为"+curr);
	}
}
}

Java-LRU

package LRU;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Scanner;

public class main {
	static class linknode{
		Integer key;
		String value;
		linknode prev;
		linknode next;
		public linknode(Integer k,String v)
		{
			key=k;
			value=v;
		}
		public linknode(){}
	}

	public static class LRU{
		int capacity;
		int curNodeNum=0;
		Map<Integer, linknode>cache=new HashMap<>();
		linknode head,tail;

		public LRU(int n) {
			capacity=n;
			head=new linknode();
			tail=new linknode();
			head.next = tail;
	        tail.prev = head;
		}

		public void removenode(linknode a) {
			a.prev.next=a.next;
			a.next.prev=a.prev;
		}
		public linknode removetail(){
			linknode res=tail.prev;
			removenode(res);
			return res;
		}
		public void pushnode(linknode a) {
			a.prev=head;
			a.next=head.next;
			head.next.prev=a;
			head.next=a;
		}
		public void moveTohead(linknode a) {
			removenode(a);
			pushnode(a);
		}
		
		public void put(String input)
		{
			String[] keyValuePairs = input.split(";");
			for (String pair : keyValuePairs) {
				String[] keyValue = pair.split(",");
				Integer key = Integer.valueOf(keyValue[0]);
				String value = keyValue[1];
				
				linknode temNode = new linknode(key, value);
				linknode samekey=cache.get(key);

				if (samekey != null) {
					samekey.value=value;
					moveTohead(samekey);
				} else {
					if (curNodeNum == capacity) {
						linknode de=removetail();
						cache.remove(de.key);
						curNodeNum--;
					}
					cache.put(key, temNode);
					pushnode(temNode);
					curNodeNum++;

				}

			}
		}

		public void get(String input) {
			String[] keyValue = input.split(";");
			for (String key : keyValue) {
				Integer curKey = Integer.valueOf(key);
				linknode getNode=cache.get(curKey);
				
				if(getNode==null) {
					System.out.print("null;");
				}
				else {
					System.out.print(getNode.value + ";");
					moveTohead(getNode);
				}
			}
		}
	}
	
	public static void main(String arg[]) {
		Scanner s = new Scanner(System.in);
		int n=s.nextInt();//最大容量
		LRU cache=new LRU(n);
		int m=s.nextInt();//操作次数
		while(m>0)
		{
			String opString=s.next();
			String line=s.nextLine().trim();
			if(opString.equals("put")) {
				cache.put(line);
			}
			if(opString.equals("get")) {
				cache.get(line);
			}
			m--;
		}
	}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值