题目描述:
给定长度为n的只有小写字母的字符串s,进行m次操作,每次将[l,r]范围内所有c1字符改成c2,输出操作完的字符串
输入描述;
第一行两个数n,m
第二行一个字符串s
之后m行,每行两个数lz两个字符cl c2
输出描述:
输出一行一个字符串
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入:
5 3
wxhak
3 3 h x
1 5 x a
1 3 w g
输出
gaaak
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
String str = sc.next();
char c[] = str.toCharArray();
for (int i = 0; i < m; i++) {
int l = sc.nextInt();
int r = sc.nextInt();
char c1 = sc.next().charAt(0);
char c2 = sc.next().charAt(0);
for (int j = l - 1; j < r; j++) {
if (c[j] == c1) {
c[j] = c2;
}
}
}
String s = "";
for (int i = 0; i < n; i++) {
s += c[i];
}
System.out.println(s);
}
}
题目描述
ruby很喜欢吃蘑条。
有一天,她拿出了n根薯条,第i根遘条的长度为ai。
ruby认为,若两根薯条的长度之差在和r之间,则认为这两根薯条有“最萌身高差”。用数学语言描述,即若l≤∣ai-aj∣≤r,则第i根薯条和第j根薯条有“最萌身高差”。
注:次序不影响统计,即认为(ai,aj)和(aj,ai)为同一对。
输入描述;
第一行三个正整数n,i,r,含义见题目描述。( 1<n<200000, 1<l<r<1e9
第二行n个正整数ai,分别代表每根薯条的长度。(1<ai<1e9)
输出描述:
一个正整数,代表,代表”最萌身高差"的薯条对数。
示例1输入输出示例仅供调试,后台判题数据一般不包含示例
输入
5 2 3
3 1 6 2 5
输出
4
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int l = sc.nextInt();
int r = sc.nextInt();
int[] a = new int[n];
for (int i=0;i<n;i++)
{
a[i]=sc.nextInt();
}
int count=0;
for (int i=0;i<a.length;i++)
{
int ai=a[i];
for (int j=i+1;j<a.length;j++)
{
int aj=a[j];
if (aj>ai)
{
if (l<=(aj-ai)&& (aj-ai)<=r)
count++;
}
else if (aj<ai)
{
if (l<=(ai-aj)&& (ai-aj)<=r)
count++;
}
}
}
System.out.println(count);
}
}
问题描述:
给定n个向量的起点和终点x1,y1,x2,y2,再给出一个目标向量,求能否由n个向量中的两个相加构造出一个与目标向量平行的向量(注意,平行包括方向相同或相反)
第一行给定一个整数n
接下来n行每行四个整数x1,y1,x2,y2,表示第i个向量的起点和终点
最后一行给出四个整数x1,y1,x2,y2,表示目标向量的起点和终点
若可以,输出“YES”
否则输出“NO”(均不含引号)
第一行给定一个整数n
接下来n行每行四个整数xl, y1,x2,y2,表示第i个向量的起点和终点最后一行给出四个整数x1,y1, x2,y2,表示目标向量的起点和终点1n<1000,1 <c1, gl,c2, g2 <10000
愉出描述:
若可以,输出”YEs"
否则输出"NO”(均不含引号)
示例1输入输出示例仅供词试,后台判题数据一股不包含示例
输入
5
1 2 4 8
2 4 5 10
1 2 2 4
3 5 4 6
6 10 7 11
1 1 4 7
输出
YES
代码--该代码仅为参考
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int n, c=0, k=0, m=1;
double p,q,x,y;
Scanner scan = new Scanner(System.in);
if ((n=scan.nextInt())!=0) {
int[][] a = new int[n+1][6];
for(int i=0; i<=n; i++) {
for(int j=0; j<4; j++) {
a[i][j] = scan.nextInt(); //存储输入各个向量的始末坐标
}
a[i][4] = a[i][2] - a[i][0]; //用每一行的两个元素表示 该向量的坐标
a[i][5] = a[i][3] - a[i][1];
}
for(m=0; m<n; m++) {
for(k=m+1; k<n; k++) {
x = a[m][4] + a[k][4]; //将两个平行的向量坐标 相加存入X 和 Y中
y = a[m][5] + a[k][5];
p = a[n][4] * y;
q = a[n][5] * x;
if (p == q) { // 判断向量与目标向量是否平行
c++;
}
}
}
if (c!=0) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
}
}
题目描述:
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
代码:
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int k=sc.nextInt();
int count=0,s=1,flag=1,i;
for(i=1;i<=k;s++,flag++) {
for(int j=1;j<=flag;j++) {
count+=s;
i++;
if(i>k) {
break;
}
}
}
System.out.println(count);
}
}
题目描述:
试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次?
例如,在1到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int x=sc.nextInt();
StringBuilder str=new StringBuilder();
long count=0;
for(int i=1;i<=n;i++) {
str.append(i);
}
String str2=str.toString();
char []c=str2.toCharArray();
for(int i=0;i<c.length;i++) {
if(c[i]==((char)('0'+x))) {
count++;
}
}
System.out.println(count);
}
}
给你一个数,让他进行巴啦啦能量,沙鲁沙鲁,小魔仙大变身,如果进行变身的数不满足条件的话,就继续让他变身。。。直到满足条件为止。
巴啦啦能量,沙鲁沙鲁,小魔仙大变身:对于一个数,把他所有位上的数字进行加和,得到新的数。
如果这个数字是个位数的话,那么他就满足条件。
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
wer(n);
}
static void wer(int n) {
String str=String.valueOf(n);
char c[]=str.toCharArray();
int g=0;
for(int i=0;i<c.length;i++) {
g+=c[i]-'0';
}
if(g<10) {
System.out.println(g);
}else {
wer(g);
}
}
}
题目描述:
栗酱一个人闲得无聊的时候总是会一个人玩一些有趣的游戏。
有一天,她在机房里看见了一张图,可能是做acm的学长留下的:
栗酱想知道每一个数字,横着竖着分别有几根火柴呢?(由于火柴商偷工减料,我们认定,只要存在棍子,它就是火柴!)
代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
for(int i=0;i<t;i++) {
int a=sc.nextInt();
int h=0,s=0;
int num=0;
if(a==0) {
h=2;
s=4;
}
else {
while(a!=0) {
num=a%10;
a=a/10;
switch (num){
case 0:h+=2;s+=4;break;
case 1:h+=0;s+=2;break;
case 2:h+=3;s+=2;break;
case 3:h+=3;s+=2;break;
case 4:h+=1;s+=3;break;
case 5:h+=3;s+=2;break;
case 6:h+=3;s+=3;break;
case 7:h+=1;s+=2;break;
case 8:h+=3;s+=4;break;
case 9:h+=3;s+=3;break;
}
}
}
System.out.println(h+" "+s);
}
}
}
本文提供了一系列编程挑战的解决方案,涉及字符串修改、数组处理、向量运算等,通过Java实现,展示了不同类型的算法题解思路。
2570

被折叠的 条评论
为什么被折叠?



