• Java程序设计——反转字符串 & 找朋友 & 计算int型二进制1的个数 & 情报加密 & 计算日期 & 求近似数 & 输出较小数(练习1)


    作为刚刚入门Java的选手,其实C++的功底起到了很大的作用。但是,Java之于C++最大的不同,我个人认为,是其类的多样性。才入门的我,写着老师布置的简单的面对过程的题,如果是C++,可以算是简单了,但是,在Java中,各种类和函数能否熟练掌握以及是否理解其本身的性质,对于能否迅速过渡并且完成老师的任务至关重要。

    在C++中,最简单也是最常用的输入输出,变为了一长串的调用。虽然繁琐,但熟能生巧。下面几道题便是这几天的成果。

    经过训练,确实可以感觉到一种从陌生到熟练的感觉。也希望对大家有所帮助。

    一、反转字符串

    【问题描述】写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。

    【输入形式】输入N个字符
    【输出形式】输出该字符串反转后的字符串

    【样例输入】

      abcd
    【样例输出】

      dcba 

    import java.io.*;
    import java.util.Scanner;
    
    public class reverseString {
    	
        public static void main(String[] args) throws IOException {
        	Scanner scan = new Scanner(System.in);
        	String str = null;
        	
        	if(scan.hasNextLine()){
        		str = scan.nextLine();
        	}
        	scan.close();
        	
        	for(int i= str.length();i>=1;i--){
        		System.out.print(str.substring(i-1,i));
        	}
        }
    }
    

    二、找朋友

    【问题描述】

    两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份湖大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。

    首先你对借阅记录进行了一番整理,把N个读者依次编号为1,2,…,N,把M本书依次编号为1,2,…,M。同时,按照“臭味相投”的原则,和你喜欢读同一本书的人,就是你的潜在朋友。你现在的任务是从这份借阅记录中计算出每个人有几个潜在朋友。

    【输入形式】

    每个案例第一行两个整数N,M。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P(1<=P<=M)

    【输出形式】

    每个案例包括N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”(即悲剧,^ ^)


    【样例输入】

    4  5

    2

    3

    2

    1


    【样例输出】

    1

    BeiJu

    1

    BeiJu

    
    import java.io.*;
    import java.util.Scanner;
    
    public class findFriend {
    	public static void main(String []args){
    		Scanner N = new Scanner(System.in);
    		//进行输入
    		
    		int reader = N.nextInt();//获取读者数
    		int book = N.nextInt();//获取书的数量
    		//建立数组
    		int[] readers = new int[reader];
    		int[] books = new int[book];
    		//书所拥有的人的数量初始化
    		for(int k=0;k<book;k++){
    			books[k] = 0;
    		}
    		//了解每个读者喜欢的书,统计每本书拥有读者个数
    		for(int i=0;i<reader;i++){
    			readers[i] = N.nextInt();
    			for(int k=0;k<book;k++){
    				if(readers[i]-1 == k){
    					books[k]++;
    				}
    			}
    		}
    		//停止对输入的接收
    		N.close();
    		//输出潜在读者个数,
    		//循环中,读者如果找到自己喜爱的书就可以知道书拥有的人数
    		for(int j=0;j<reader;j++){
    			for(int k=0;k<book;k++){
    				if(readers[j]-1 == k){
    					if(books[k]-1 != 0){
    						System.out.println(books[k]-1);
    					}
    					else{
    						System.out.println("BeiJu");
    					}
    				}
    			}
    		}
    		
    	}
    }
    

    三、计算int型二进制1的个数

    【问题描述】

    输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

    【输入形式】

    输入一个整数int类型


    【输出形式】

    这个数转换成2进制后,输出1的个数

    【样例输入】

    5

    【样例输出】

    2

    import java.util.Scanner;
    
    public class countOne {
    	public static void main(String[] args){
    		Scanner scan = new Scanner(System.in);
    		
    		int num = 0;
    		if(scan.hasNextInt()){
    			num = scan.nextInt();
    		}
    		scan.close();
    
    		int count = 0;
    		while(true){
    			if(num==0){
    				break;
    			}
    			else if(num%2==0){
    				num /= 2;
    			}
    			else if(num%2==1){
    				count++;
    				num/=2;
    			}
    		}
    		System.out.print(count);
    	}
    	
    }
    

    四、情报加密

    【问题描述】

    在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。

    【输入形式】

    可能有多组测试数据。每组测试数据的第一行是字符串的数目n,其余n行每行一个字符串,每个字符串长度小于80个字符。

    【输出形式】

    对于每组数据,输出每行字符串的加密字符串。

    【样例输入】

    1

    Hello! How are you!


    【样例输出】

    Ifmmp! Ipx bsf zpv!

    import java.util.Scanner;
    
    public class infoEncryption {
    	public static void main(String[] args){
    		
    		Scanner scan = new Scanner(System.in);
    		
    		int num = 0;
    		String s;
    		char c;
    		char ch;
    		//num输入后会有'
    '的符号,使得nextLine提前读入,这里可以多设置一个,排除干扰
    		num = scan.nextInt();
    		scan.nextLine();
    		String[] str = new String[num];
    		
    		for(int i=0;i<num;i++){
    			str[i] = null;
    		}
    	
    		if(scan.hasNextLine()){
    			for(int k=0;k<num;k++){
    				str[k] = scan.nextLine();
    				for(int j=0;j<str[k].length();j++){
    					s = str[k].substring(j, j+1); 
    					c = s.charAt(0);
    					if(s.equals("z")){
    						System.out.print("a");
    					}
    					else if(s.equals("Z") ){
    						System.out.print("A");
    					}
    					else if((c < 'z' && c >= 'a')||(c < 'Z' && c >= 'A')){
    						ch = ++c;
    						System.out.print(ch);
    					}
    					else{
    						System.out.print(c);
    					}
    					
    				}
    				System.out.println();
    			}
    		}
    		scan.close();
    	}		
    }

    五、计算日期

    【问题描述】

    给出年分m和一年中的第n天,算出第n天是几月几号。

    【输入形式】

    输入包括两个整数y,n

    【输出形式】

    可能有多组测试数据,对于每组数据,按yyyy-mm-dd的格式将输入中对应的日期打印出来。


    【样例输入】

    2000 3

    2000 31

    2000 40

    2000 60


    【样例输出】

    2000-01-03

    2000-01-31

    2000-02-09

    2000-02-29

    import java.util.Scanner;
    
    public class whatDate {
    	public static boolean runYear(int year){
    		//判断是否是闰年,注意,主函数调用,必须为static函数
    		if(((year%4==0)&&(year%100!=0))||(year%400==0)){
    			return true;
    		}
    		else{
    			return false;
    		}
    	}
    	public static void main(String[] args) {
    		Scanner scan = new Scanner(System.in);
    		int year = 0;
    		int days = 0;		
    		int month = 0;
    		
    		int[] dayR = {31,29,31,30,31,30,31,31,30,31,30,31};
    		int[] dayP = {31,28,31,30,31,30,31,31,30,31,30,31};
    		
    		while(scan.hasNextInt()){
    			year = scan.nextInt();
    			days = scan.nextInt();
    			if(runYear(year)){
    				for(int i=0;i<12;i++){
    					if(days<=dayR[i]){
    						month = i+1;
    						break;
    					}
    					days -= dayR[i];
    				
    				}
    			}
    			else{
    				for(int i=0;i<12;i++){
    				if(days<=dayP[i]){
    					month = i+1;
    					break;
    				}
    				days -= dayP[i];
    				
    				}
    			}
    			if(month<10){
    				System.out.print(year+"-0"+month);
    			}
    			else{
    				System.out.print(year+"-"+month);
    			}
    			if(days<10){
    				System.out.println("-0"+days);
    			}
    			else{
    				System.out.println("-"+days);
    			}
    		
    		}
    	}
    }
    

    六、求近似数

    【问题描述】

    写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

    【输入形式】

    输入一个正浮点数值

    【输出形式】

    输出该数值的近似整数值

    【样例输入】

    5.5

    【样例输出】

    6

    import java.util.Scanner;
    
    
    public class numRound {
    	public static void main(String[] args){
    		Scanner scan = new Scanner(System.in);
    		
    		float f = 0.0f;
    		
    		if(scan.hasNextFloat()){
    			f = scan.nextFloat();
    		}
    		scan.close();
    		
    		System.out.print(Math.round(f));
    	}
    }

    七、输出较小数

    【问题描述】输入n个整数,输出其中最小的k个。

    【输入形式】输入说明 1输入两个整数(n k) 2输入一个整数数组

    【输出形式】输出一个整数数组

    【样例输入】

       5 2 

     1 3 5 7 2 

    【样例输出】

     1 2

    import java.util.Scanner;
    
    import java.util.Arrays;
    
    public class outSmall {
    	public static void main(String[] args){
    		Scanner scan = new Scanner(System.in);
    		
    		int n=0; int k=0;
    		
    		if(scan.hasNextInt()){
    			n = scan.nextInt();
    			k = scan.nextInt();
    		}
    		
    		int[] num = new int[n];
    		
    		for(int i=0;i<n;i++){
    			num[i] = scan.nextInt();
    		}
    		scan.close();
    		Arrays.sort(num);
    		
    		for(int i=0;i<k;i++){
    			System.out.print(num[i] + " ");
    		}
    		
    	}
    }
    
  • 相关阅读:
    ExpandoObject与DynamicObject的使用
    ManualResetEvent 线程通信
    CancellationTokenSource 取消任务
    SQL Server 每日一题--老二解析
    说说 C# 8 using 新特性
    SQL Server 每日一题--老二
    C#中的坑--浮点类型
    开胃菜解析
    开胃菜
    快速入门 Arrow 日期处理库
  • 原文地址:https://www.cnblogs.com/Comet-Fei/p/11885215.html
Copyright © 2020-2023  润新知