1.1 反转字符串(Java)
【问题描述】写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。
【输入形式】输入N个字符
【输出形式】输出该字符串反转后的字符串
【样例输入】
abcd
【样例输出】
dcba
【代码】
package a;
import java.util.Scanner;
public class A1 {
public static void main(String[] args) {
Scanner str = new Scanner(System.in);
String s = str.nextLine();
for (int i = s.length()-1; i >= 0; i--)
{
System.out.print(s.charAt(i));
}
}
}
复杂一点点:
package a;
import java.util.Scanner;
public class A1 {
public static void main(String[] args) {
Scanner str = new Scanner(System.in);
String s = str.nextLine();
byte[] b = s.getBytes();//转换为字节数组
for (int i = b.length-1; i >= 0; i--)
{
System.out.print((char)b[i]);
}
}
}
1.2 找朋友(JAVA)
【问题描述】
两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份湖大图书馆的图书借阅记录,于是你挑灯熬夜地编程,想从中发现潜在的朋友。
首先你对借阅记录进行了一番整理,把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
【代码】
package a;
import java.io.*;
import java.util.Scanner;
public class A2 {
public static void main(String []args){
Scanner N = new Scanner(System.in);
int reader = N.nextInt();
int book = N.nextInt();
int i;
int[] readers = new int[reader];
int[] books = new int[book];
for(i=0;i<book;i++){
books[i] = -1;//初始化为-1
}
for(i=0;i<reader;i++){
readers[i] = N.nextInt();
books[readers[i]-1]++;//数字一致则加1
}
N.close();
for(int j=0;j<reader;j++)
{
for(i=0;i<book;i++)
{
if(readers[j]-1 == i)//若该读者读这本书
{
if(books[i] != 0)//若不等于0,表示不是悲剧,输出数字
{
System.out.println(books[i]);
}
else
{
System.out.println("BeiJu");//否则输出悲剧
}
}
}
}
}
}
1.3 算int型二进制1的个数(JAVA)
【问题描述】
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。
【输入形式】
输入一个整数int类型
【输出形式】
这个数转换成2进制后,输出1的个数
【样例输入】
5
【样例输出】
2
【代码】
package a;
import java.util.Scanner;
public class A3 {
public static void main(String[] args){
Scanner s=new Scanner(System.in);
int number=0;
number = s.nextInt();
s.close();
int count = 0;
while(number!=0)
{
if(number%2==0)
{
number/=2;
}
else
{
count++;
number/=2;
}
}
System.out.print(count);
}
}
方法2:
package a;
import java.util.Scanner;
public class A3 {
public static void main(String[] args){
Scanner s=new Scanner(System.in);
int number=0;
number = s.nextInt();
s.close();
int count = 0;
String str=Integer.toBinaryString(number);//转化的二进制以字符串的形式返回
int len=str.length();
for(int i=0;i<len;i++)//遍历字符串查找是否有1
{
if(str.charAt(i)=='1')
count++;
}
System.out.print(count);
}
}
1.4 情报加密(JAVA)
【问题描述】
在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。
【输入形式】
可能有多组测试数据。每组测试数据的第一行是字符串的数目n,其余n行每行一个字符串,每个字符串长度小于80个字符。
【输出形式】
对于每组数据,输出每行字符串的加密字符串。
【样例输入】
1
Hello! How are you!
【样例输出】
Ifmmp! Ipx bsf zpv!
【代码】
package a;
import java.util.Scanner;
public class A4 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int num = 0;
char c;
num = scan.nextInt();
scan.nextLine();
String[] str = new String[num];
for(int i=0;i<num;i++){
str[i] ="";
}
if(scan.hasNextLine()){
for(int k=0;k<num;k++){
str[k] = scan.nextLine();
for(int j=0;j<str[k].length();j++){
c=str[k].charAt(j);
if(c=='z'){
System.out.print("a");
}
else if(c=='Z')
{
System.out.print("A");
}
else if((c < 'z' && c >= 'a')||(c < 'Z' && c >= 'A')){
c++;
System.out.print(c);
}
else{
System.out.print(c);
}
}
System.out.println();
}
}
scan.close();
}
}
1.5 计算日期(JAVA)
【问题描述】
给出年分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
【代码】
package a;
import java.util.Scanner;
public class A5 {
public static boolean Yearop(int year){//判断是否为闰年
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[] day = {31,28,31,30,31,30,31,31,30,31,30,31};
while(scan.hasNextInt()){
year = scan.nextInt();
days = scan.nextInt();
if(Yearop(year)){//若为闰年,二月份天数为29
day[1]=29;
for(int i=0;i<12;i++){
if(days<=day[i]){
month = i+1;
break;
}
days -= day[i];
}
}
else{
for(int i=0;i<12;i++){
if(days<=day[i]){
month = i+1;
break;
}
days -= day[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);
}
}
}
}
1.6 求近似数(JAVA)
【问题描述】
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。
【输入形式】
输入一个正浮点数值
【输出形式】
输出该数值的近似整数值
【样例输入】
5.5
【样例输出】
6
【代码】
package a;
import java.util.Scanner;
public class A6 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
float x = 0.0f;
if(scan.hasNextFloat()){
x = scan.nextFloat();
}
scan.close();
System.out.print(Math.round(x));//调用round()函数
}
}
public class Main{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
//老是忘了加()
double a = sc.nextDouble();
long b = Math.round( a);
System.out.println(b);
}
}
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
while (sc.hasNext()){
float a = sc.nextFloat();
int b = (int)a;
float c = a-b;
if (c >= 0.5 ){
System.out.println(b+1);
}
if(c < 0.5 ){
System.out.println(b);
}
}
}
}
1.7 输出较小数(Java)
【问题描述】输入n个整数,输出其中最小的k个。
【输入形式】输入说明 1输入两个整数(n k) 2输入一个整数数组
【输出形式】输出一个整数数组
【样例输入】
5 2
1 3 5 7 2
【样例输出】
1 2
【代码】
package a;
import java.util.Scanner;
import java.util.Arrays;
public class A7 {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n=0;
int k=0;
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] + " ");
}
}
}