对于输入字符串s(假设字符串只包含字母构成的单词和空格),完成如下功能:
统计该字符串中字母c出现的次数
求该字符串的逆
输出该字符串中子串str的所有位置(无需考虑子串叠加现象)
将字符串中每个单词的第一个字母变成大写并输出
输入格式:
字符串s 字母c 子串str
输出格式:
c在s中出现的次数 s的逆 str在s中的所有位置 所有单词首字母大写后的字符串
输入样例:
在这里给出一组输入。例如:
I scream you scream we all scream for icecream
m
eam
输出样例:
在这里给出相应的输出。例如:
4
maerceci rof maercs lla ew maercs uoy maercs I
5 16 30 43
I Scream You Scream We All Scream For Icecream
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
String strc=sc.nextLine();//待输入字母,因为Java中没有直接读取单个字符的函数,
//所以将字母输入到字符串中,调用String中的charAt()函数
//取第一个字符即为我们想要输入的单个字符
char c=strc.charAt(0);
String str=sc.nextLine();
char []ns=s.toCharArray();
int count=0;
// System.out.println(ns);
for (int i = 0; i < ns.length ; i++) {
if(ns[i]==c){
count++;
}
}
System.out.println(count);
for (int i = 0; i < ns.length/2 ; i++) {
char temp=ns[i];
ns[i]=ns[ns.length-i-1];
ns[ns.length-i-1]=temp;
}
System.out.println(ns);
int head=0;
int []arr=new int[s.length()];
String []nns=s.split(" ");//将句子中的各个单词分隔
int j=0;
int preStrLength=0;
while(true)
{
//indexOf——返回指定字符第一次出现的字符串内的索引
int n = s.indexOf(str);
//找不到返回-1,循环结束
if (n == -1) {
break;
}
//存储找到的值(下标)
//arr[j++]=n;
//第一次head=0,从0开始找,之后head变为下标n+要找字符串的长度
//应该从这里开始查找该子串,不加长度会出问题的!
//head = n + str.length();
if(j != 0)
System.out.print(' ');
//break;
System.out.print((n + preStrLength));//字符串位置
j++;
s= s.substring(n +str.length());//截取
preStrLength +=(n +str.length());
}
// System.out.print(arr[0]);
// for (int i = 1; i < j ; i++) {
// System.out.print(" " + arr[i]);
// }
System.out.println();
String s1=new String();
for (int i = 0; i < nns.length ; i++) {
if(i==nns.length-1)
s1+=nns[i].substring(0,1).toUpperCase()+nns[i].substring(1);
else
s1+=nns[i].substring(0,1).toUpperCase()+nns[i].substring(1)+" ";
}
System.out.println(s1);
sc.close();
}
}
/*I scream you scream we all scream for icecream
m
eam*/
镜像字符串是两个字符序列完全相反的字符串。从键盘录入两个不包含空格的字符串,判断第二个是否为第一个的镜像字符串,是则输出yes,否则输出no.
输入格式:
键盘录入的由一个空格分隔的两个字符串
输出格式:
yes(no)
输入样例:
在这里给出一组输入。例如:
abc cba
输出样例:
在这里给出相应的输出。例如:
yes
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
String s1=cin.next();
String s2=cin.next();
String ns1=new StringBuffer(s1).reverse().toString();
if(ns1.equals(s2))
System.out.println("yes");
else System.out.println("no");
cin.close();
}
}
给定英文句子,编写方法void wordPositions(String sentence),该方法中计算sentence中的每个单词在句子中的起始位置和单词长度并输出。假设句子中只包含英文字母和空格,且单词不重复。
输入格式:
句子
输出格式:
每个单词在句子中的起始位置和单词长度
输入样例:
在这里给出一组输入。例如:
Why are you so crazy about java
输出样例:
在这里给出相应的输出。例如:
Why: 0, 3
are: 4, 3
you: 8, 3
so: 12, 2
crazy: 15, 5
about: 21, 5
java: 27, 4
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
Statistics st=new Statistics();
st.wordPositions(s);
sc.close();
}
}
class Statistics{
int []count;//统计单词长度
String []ns;//纪录单词
List<Integer>pos =new LinkedList<>();//记录单词出现位置
public Statistics() {
count=new int[100];
}
public void wordPositions(String sentence)
{
for (int i = 0; i < sentence.length() ; i++) {
if(i==0)
{
pos.add(i);
}
else if(sentence.charAt(i-1)==' ')
{
pos.add(i);
}
}
ns=sentence.split(" ");//将句子转化为字符串数组
for (int i = 0; i < ns.length ; i++) {
count[i]=ns[i].length();
}
for (int i = 0; i <ns.length ; i++) {
System.out.println(ns[i]+": "+pos.get(i)+", "+count[i]);
}
}
}
/*Why are you so crazy about java*/
)
输入年份和月份,打印当月所有双休日日期,打印格式为:“2018-06-16”
输入格式:
年份和月份
输出格式:
双休日日期
输入样例:
在这里给出一组输入。例如:
2018 6
输出样例:
在这里给出相应的输出。例如:
2018-06-02
2018-06-03
2018-06-09
2018-06-10
2018-06-16
2018-06-17
2018-06-23
2018-06-24
2018-06-30
ans:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.text.ParsePosition;
import java.util.Calendar;
import java.util.Scanner;
import java.util.Date;
public class Main{
public static void main(String[] args) throws ParseException {
Scanner input=new Scanner(System.in);
// int year=input.nextInt();
// int month=input.nextInt();
String str=input.nextLine();
SimpleDateFormat df1=new SimpleDateFormat("yyyy MM");//输入形式
SimpleDateFormat df2=new SimpleDateFormat("yyyy-MM-dd");//输出形式
Calendar cal=Calendar.getInstance();//使用默认时区和区域设置获取日历。
cal.clear();// 将此 Calendar 的所日历字段值和时间值(从历元至现在的毫秒偏移量)设置成未定义。
cal.setTime(df1.parse(str));// 使用给定的 Date 设置此 Calendar 的时间。
// parse(String text, ParsePosition pos) 解析字符串的文本,生成 Date。
for (int i = 0; i < cal.get(Calendar.DAY_OF_MONTH); i++) {
//查询范围为某月
if(cal.get(Calendar.DAY_OF_WEEK)==Calendar.SATURDAY||cal.get(Calendar.DAY_OF_WEEK)==Calendar.SUNDAY)
{
System.out.println(df2.format(cal.getTime()));// 返回一个表示此 Calendar 时间值(从历元至现在的毫秒偏移量)的 Date 对象。
}
cal.add(Calendar.DAY_OF_MONTH,1);//天数+1
}
input.close();
}
}
This program reads a lot of words, in which may be duplicated words. The program picks out all the duplicated ones and sorts the remainders in a descendent order.
函数接口定义:
public static ArrayList<String> pick(ArrayList<String> a);
a is the ArrayList
to be parsed and returns the result as an ArrayList
.
裁判测试程序样例:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Scanner;
public class Main {
/* 请在这里填写答案 */
public static void main(String[] args) {
ArrayList<String> lst = new ArrayList<>();
Scanner in = new Scanner(System.in);
while ( in.hasNext() ) {
lst.add(in.next());
}
lst = pick(lst);
for ( String x:lst) {
System.out.print(x+" ");
}
System.out.println();
in.close();
}
}
输入样例:
this is a test at this Zhejiang University
输出样例:
this test is at a Zhejiang University
public static ArrayList<String> pick(ArrayList<String> a) {
ArrayList<String> rs = new ArrayList<String>();
for(int i=0;i<a.size();i++) {
if(!rs.contains(a.get(i))) {
rs.add(a.get(i));
}
}
Collections.sort(rs);
Collections.reverse(rs);
return rs;
}
约瑟夫环问题
约瑟夫环是一个数学的应用问题:已知n个人(以编号a,b,c…分别表示)围坐在一张圆桌周围。从编号为1的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。
输入格式:
固定为2行,第一行为m,第二行为n个人的名称列表,用英文字母代表,元素直接使用英文逗号 , 分开
输出格式:
一行,为出列元素序列,元素之间使用英文逗号 , 分开【注意:末尾元素后没有逗号】
输入样例:
在这里给出一组输入。例如:
3
a,b,c,d,e,f,g
输出样例:
在这里给出相应的输出。例如:
c,f,b,g,e,a,d
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String []args)
{
Scanner cin=new Scanner(System.in);
int a=cin.nextInt();
cin.nextLine();
String s=cin.nextLine();
String []ns=s.split(",");
List arrayList=new ArrayList<String>();
for(int i=0;i<ns.length;i++)
{
arrayList.add(ns[i]);
}
int f=0;//记录每个人报的数
while(arrayList.size()>0)
{
Iterator it=arrayList.iterator();
while (it.hasNext())
{
String nns=(String)it.next();
if(f==a-1)
{
if( arrayList.size() > 1) {
System.out.print(nns + ",");
}
else {
System.out.println(nns);
}
it.remove();
}
f = ( f + 1) % a;
}
}
cin.close();
}
}
找出长度最长的单词(不同长度的单词只出现一次)。
输入格式:
输入格式为单行形式,单词之间使用空格分割。
输出格式:
输出格式为长度最长的一个单词。
输入样例:
在这里给出一组输入。例如:
an not need happy suggest
输出样例:
在这里给出相应的输出。例如:
suggest
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
String s = cin.nextLine();
String []str = s.split(" ");
int max = str[0].length();
String maxs=str[0];
for(String i:str)
{
if(i.length()>max)
max=i.length();
maxs=i;
}
System.out.println(maxs);
cin.close();
}
}
在office软件(word,excel)中,有时只需要打印整个文档中的一部分,就需要用户选择需要打印的页码范围。目前输入的页码范围格式定义为:以逗号分割,可以使用-表示连续页码。例如:1,3,5-9,20。表示需要打印的页码为1,3,5,6,7,8,9,20。
本题目要求读入一行字符串,作为需要打印的页码范围。需要注意以下几点:
1、页码范围输入可以不按顺序。例如:5,3,7,9-10,1-2;
2、连续的页码定义也可能不会按照由小到大的顺序输入。例如:1,9,5,20-15,10;
3、输入的页码范围可能会有重复。例如:1,9,15,5-10,12-20;
输入格式:
第一行:表示页码范围的格式化字符串
输出格式:
将需要打印的页码按照由小到大的顺序输出,以空格分割
输入样例:
1,3,5-9,20
输出样例:
1 3 5 6 7 8 9 20
输入样例:
12-20,1,15,9,5-10
输出样例:
1 5 6 7 8 9 10 12 13 14 15 16 17 18 19 20
import java.util.ArrayList;
import java.util.Scanner;
import java.util.TreeSet;
public class Main{
public static void main(String[] args) {
Scanner n=new Scanner(System.in);
String str=n.nextLine();
String[] st=str.split(",");
TreeSet t=new TreeSet();
for(int i=0;i<st.length;i++)
{
if(st[i].contains("-")) {
String[] f=st[i].split("-");
int x=Integer.parseInt(f[0]);
int d=Integer.parseInt(f[1]);
if(x>d) {
int s=x;
x=d;
d=s;
}
for(int j=x;j<=d;j++) //展开x到d之间的所有值
{
t.add(j);
}
}
else {
t.add(Integer.parseInt(st[i]));
}
// System.out.println(t);
}
ArrayList m=new ArrayList(t);
for(int i=0;i<m.size();i++) {
if(i==0)
System.out.print(m.get(i));
else
System.out.print(" "+m.get(i));
}
}
}
使用集合存储防重复
从键盘接收N个英文字符串(其中不同的字符串数量大于10),从头开始取5个不同的字符串放入一个集合S1,然后接着取5个不同的字符串放入另一个集合S2,按照字母顺序输出S1和S2的并集中的每个字符串(字符串区分大小写)
输入格式:
一行以空格分开的英文字符串(不同的字符串数量大于10)。
输出格式:
按照字母顺序(先比较字符串首字母,首字母相同的比较字符串第二个字母,以此类推)输出的S1和S2并集的字符串。
输入样例:
android python java javaee javase database java jsp servlet java algorithm junit
输出样例:
algorithm
android
database
java
javaee
javase
jsp
python
servlet
//从键盘接收N个英文字符串(其中不同的字符串数量大于10),从头开始取5个不同的字符串放入一个集合S1,
//然后接着取5个不同的字符串放入另一个集合S2,按照字母顺序输出S1和S2的并集中的每个字符串(字符串区分大小写)
import java.util.*;
public class Main {
public static void main(String args[])
{
Scanner cin=new Scanner(System.in);
String s=cin.nextLine();
String []ns=s.split(" ");
Set<String> s1=new TreeSet<String>();//集合s1
Set<String> s2=new TreeSet<String>();//集合s2
for(int i=0;i<ns.length;i++)
{
if(s1.size()<5)
{
s1.add(ns[i]);
continue;
}
if(s2.size()<5)
{
s2.add(ns[i]);
continue;
}
}
s1.addAll(s2);//s2并入s1
/*for(Object i:s1)
{
System.out.println(i);
}*/
Iterator it=s1.iterator();
while(it.hasNext())
System.out.println(it.next());
cin.close();
}
}