java二进制反转_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

books[k] = 0;

}

//了解每个读者喜欢的书,统计每本书拥有读者个数

for(int i=0;i

readers[i] = N.nextInt();

for(int k=0;k

if(readers[i]-1 == k){

books[k]++;

}

}

}

//停止对输入的接收

N.close();

//输出潜在读者个数,

//循环中,读者如果找到自己喜爱的书就可以知道书拥有的人数

for(int j=0;j

for(int k=0;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

str[i] = null;

}

if(scan.hasNextLine()){

for(int k=0;k

str[k] = scan.nextLine();

for(int j=0;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

num[i] = scan.nextInt();

}

scan.close();

Arrays.sort(num);

for(int i=0;i

System.out.print(num[i] + " ");

}

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值