反转字符串
题目:将输入的字符串翻转后输出。如abcd输出为dcba。
思路:将字符串转换为字符数组,倒着遍历。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
String s = in.nextLine();
String reverse = "";
char[] ch = s.toCharArray();
for(int i=ch.length-1;i>=0;i--) {
reverse+=ch[i];
}
System.out.print(reverse);
}
找朋友
题目:每个案例第一行两个整数N,M。接下来有N行,第i(i = 1,2,…,N)行每一行有一个数,表示读者i-1最喜欢的图书的编号P。输出N行,每行一个数,第i行的数表示读者i有几个潜在朋友。如果i和任何人都没有共同喜欢的书,则输出“BeiJu”。
思路:定义两个数组分别存放每个人喜欢的图书编号和喜欢某图书的人数。最后由题意可得,对于每一位读者,遍历他喜欢的书的人数是否超过1,超过则计算人数(-1),否则输出“BeiJu”。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int N=0, M=0;
N = in.nextInt();M=in.nextInt();
int[] f = new int[N];
int[] book = new int[M];
for (int i=0;i<N;i++) {
f[i]=in.nextInt();
book[f[i]]++;
}
for (int i=0;i<N;i++) {
if(book[f[i]]>1) {
System.out.println(book[f[i]]-1);
}else {
System.out.println("BeiJu");
}
}
in.close();
}
计算int型二进制1的个数
题目:计算int
型二进制1的个数。即将数转为二进制后,统计1的个数。如输入5,输出2.
思路:利用Integer
类里的toBinaryString
方法,将输入的int
型整数转换成二进制字符串,对其进行遍历统计1的个数。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int sum = 0;
String result = Integer.toBinaryString(n);
for (int i=0;i<result.length();i++) {
//charAt:利用下标进行字符串定位
if(result.charAt(i)=='1')sum++;
}
System.out.print(sum);
in.close();
}
情报加密
题目:对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代。可能有多组测试数据。每组测试数据的第一行是字符串的数目n,其余n行每行一个字符串,每个字符串长度小于80个字符。对于每组数据,输出每行字符串的加密字符串。
输入 1 (回车) Hello! How are you!
输出 Ifmmp! Ipx bsf zpv!
思路:因为可能有多组测试数据,因此需要while(in.hasNextInt())
进行判断,当下一个输入是整数型时则接收输入且以此设定循环。循环内根据条件进行修改即可,注意强制类型转换。
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
while(in.hasNextInt()) {
int n = in.nextInt();
for(int i=0;i<n;i++) {
//按行读入
String s = in.nextLine();
String change = "";
for(int j=0;j<s.length();j++) {
if((s.charAt(j)>='a'&&s.charAt(j)<'z')||(s.charAt(j)>='A'&&s.charAt(j)<'Z')) {
change+=(char)(s.charAt(j)+1);
}else if(s.charAt(j)=='Z'||s.charAt(j)=='z') {
change+=(char)(s.charAt(j)-25);
}else {
change+=s.charAt(j);
}
}
System.out.println(change);
}
}
in.close();
}
计算日期
题目:给出年分m和一年中的第n天,算出第n天是几月几号。输入包括两个整数y,n。可能有多组测试数据,对于每组数据,按yyyy-mm-dd的格式将输入中对应的日期打印出来。
样例输入 | 样例输出 |
---|---|
2000 3 | 2000-01-03 |
2000 31 | 2000-01-31 |
2000 40 | 2000-02-09 |
2000 60 | 2000-02-29 |
思路:
使用java自带的Calendar
类进行解题。
注意:calendar类默认0为一月。
get(Calendar.DAY_OF_MONTH);//获得这个月的第几天
get(Calendar.DAY_OF_WEEK);//获得这个星期的第几天
get(Calendar.DAY_OF_YEAR);//获得这个年的第几天
getTimeMillis();//获得当前时间的毫秒表示
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar calendar = Calendar.getInstance();//获取一个calendar实例
Scanner in = new Scanner(System.in);
int y=0,n=0;
while(in.hasNextInt()) {
y = in.nextInt();
n = in.nextInt();
calendar.set(Calendar.YEAR, y);
calendar.set(Calendar.MONTH, 0);//月份设置
calendar.set(Calendar.DAY_OF_MONTH, 0);//月中的第几天
calendar.add(Calendar.DATE, n);//指一个月中的某天,与DAY_OF_MONTH同义
//格式化输出
SimpleDateFormat format0 = new SimpleDateFormat("yyyy-MM-dd");
String time = format0.format(calendar.getTime());
System.out.println(time);
}
in.close();
}
求近似数
题目:求小数四舍五入后的结果
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
System.out.print(Math.round(in.nextDouble()));
in.close();
}
输出较小数
题目:输入n个整数,输出其中最小的k个。
如输入 5 2
1 3 5 7 2
输出 1 2
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int k = in.nextInt();
int[] m = new int[n];
for(int i=0;i<n;i++) {
m[i] = in.nextInt();
}
//数组排序函数
Arrays.sort(m);
for(int i=0;i<k;i++) {
System.out.print(m[i]+" ");
}
in.close();
}