蓝桥杯——Anagrams问题 ,字串统计 ,矩阵乘法 ,大小写转换

  算法训练 Anagrams问题  
问题描述
  Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。
  输入格式:输入有两行,分别为两个单词。
  输出格式:输出只有一个字母Y或N,分别表示Yes和No。
  输入输出样例
样例输入
Unclear
Nuclear
样例输出
Y

 

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{

Scanner sc=new Scanner(System.in);
String s1=sc.next();
String s2=sc.next();
s1=s1.toUpperCase();
s2=s2.toUpperCase();

char a[]=s1.toCharArray();
char b[]=s2.toCharArray();
int c[]=new int[26];
int d[]=new int[26];

for(int i=0;i<a.length;i++)
{
c[(int)a[i]-65]++;

}

for(int i=0;i<b.length;i++)
{
d[(int)b[i]-65]++;

}
boolean s=true;

for(int i=0;i<26;i++)
{
if(c[i]!=d[i])
{
s=false;break;
}
}

if(s)
System.out.println("Y");
else System.out.println("N");

}

}


 算法训练 字串统计      
问题描述
  给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
  第一行一个数字L。
  第二行是字符串S。
  L大于0,且不超过S的长度。
输出格式
  一行,题目要求的字符串。

  输入样例1:
  4
  bbaabbaaaaa

  输出样例1:
  bbaa

  输入样例2:
  2
  bbaabbaaaaa

  输出样例2:
  aa
数据规模和约定
  n<=60
  S中所有字符都是小写英文字母。
提示
  枚举所有可能的子串,统计出现次数,找出符合条件的那个
 

import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
int L=sc.nextInt();
String s=sc.next();
Main a=new Main();
a.childs(L,s);
}


public void childs(int L,String s)
{
String s1[][]=new String[60][60];
int in[][]=new int[60][60];
int max=0;
int td=0;
int tj=0;
for(int i=L;i<s.length();i++)
for(int j=0;j<=s.length()-i;j++)
{
s1[i][j]=s.substring(j,j+i);
}

for(int i=L;i<s.length();i++)
for(int j=0;j<=s.length()-i;j++)
for(int k=j;k<=s.length()-i;k++)
if(s1[i][k].equals(s1[i][j]))
{
in[i][j]=in[i][j]+1;
}




for(int i=L;i<=s.length();i++)
for(int j=0;j<=s.length()-i;j++)
{
if(in[i][j]>=max && td!=i)
{
max=in[i][j];
td=i;
tj=j;
}else if(in[i][j]>max)
{
max=in[i][j];
td=i;
tj=j;
}
}
System.out.println(s1[td][tj]);

}
}


  算法训练 矩阵乘法      
问题描述
  输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。
输入格式
  第一行,空格隔开的三个正整数m,s,n(均不超过200)。
  接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。
  接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。
输出格式
  m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。
样例输入
2 3 2
1 0 -1
1 1 -3
0 3
1 2
3 1
样例输出
-3 2
-8 2

提示
矩阵C应该是m行n列,其中C(i,j)等于矩阵A第i行行向量与矩阵B第j列列向量的内积。
例如样例中C(1,1)=(1,0,-1)*(0,1,3) = 1 * 0 +0*1+(-1)*3=-3

import java.util.Scanner;
public class Main{

public static void main(String[] args)
{

Scanner sc=new Scanner(System.in);
int m=sc.nextInt();
int s=sc.nextInt();
int n=sc.nextInt();

int[][] a=new int[m][s];
int[][] b=new int[s][n];
int[][] result=new int[m][n];

for(int i=0;i<m;i++)
{
for(int j=0;j<s;j++)
{
a[i][j]=sc.nextInt();
}
}

for(int i=0;i<s;i++)
{
for(int j=0;j<n;j++)
{
b[i][j]=sc.nextInt();
}
}

for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
for(int k=0;k<s;k++)
{
result[i][j]+=a[i][k]*b[k][j];
}
}
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
System.out.print(result[i][j]+" ");
}
System.out.println();
}
}

}


 算法训练 大小写转换  
问题描述
  编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。
  输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。
  输出格式:输出经过转换后的字符串。
输入输出样例
样例输入
AeDb
样例输出
aEdB

import java.util.*;
public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String s1=sc.next();
char a[]=s1.toCharArray();
for(int i=0;i<a.length;i++)
{
if(a[i]>='a' && a[i]<='z')
{
a[i]=(char)((int)a[i]-'a'+'A');
}
else if(a[i]>='A' && a[i]<='Z')
{
a[i]=(char)((int)a[i]-'A'+'a');

}
}
for(int j=0;j<a.length;j++)
{
System.out.print(a[j]);
}
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值