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输入后会有'\n'的符号,使得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] + " ");
		}
		
	}
}

 

posted @ 2019-03-14 23:21  Comet_Fei  阅读(420)  评论(0编辑  收藏  举报