来自一个渣渣的学习记录,也不知道为什么,好像没看到人用java写算法,但是自己想参加蓝桥杯的java组,来总结一下自己这两天写的3个题,是的就写了3个 两天,本人太菜了,诶。
第一题 UVA 1585 给出一个由O与X组成的串,统计得分,每个O的得分为目前连续出现O的个数,X的得分为0,。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3
难点:
其实好像也没什么,就是逻辑有点转不过来,这题对于大佬来说应该是小ks吧。直接上代码:
import java.util.*;
/*
给出一个由O与X组成的串,统计得分,每个O的得分为目前连续出现O的个数,X的得分为0,。例如,OOXXOXXOOO的得分为1+2+0+0+1+0+0+1+2+3
*/
public class Test1 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String s = sc.next(); //输入字符串
char c[] = s.toCharArray(); //将字符串变为数组
int sum = 0; // 存总分
int cound = 0; //存‘O’连续出现次数
int t = 1;
for(int i = 0; i<s.length(); i++){
if(c[i] == 'O'){
cound ++;
}
else {
for(int j = 1; j <= cound; j++){
sum = sum+t;
t++;
}
cound = 0; //出现‘X’重新计数
t = 1;
}
}
for(int j = 1; j <= cound; j++){//最后不是以X结尾的话我们要把cound值算完
sum = sum+t;
t++;
}
System.out.println(sum);
}
}
第二题 UVA1586 给出一个物质的分子式(不带括号),求分子量。本题的分子式只包括4种原子,分别为C,H,O,N, 原子量为12.01,1.008,16.00,14.01,例如C6H5OH的分子量为94.108
难点:
用数组存输入的字符串时,字符跟数字是一起存入进去的,当我们进行运算时我们要把他分隔出来,并且我们要减去相应的ASCLL码值,不知道你们怎么样,反正我想好久,诶。上代码:
import java.util.*;
/*
* 给出一个物质的分子式(不带括号),求分子量。本题的分子式只包括4种原子,分别为C,H,O,N, 原子量为12.01,1.008,16.00,14.01,例如C6H5OH的分子量为94.108
*/
public class Test2 {
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String s = sc.next();
char c[] = new char[100];
char a[] = new char[100];
c = s.toCharArray(); // 字符串变为数组
int t = s.length();
for(int i = 0; i < t; i++){ // 将c复制给a 便于最后一个元素没有下标时添加下标
a[i] = c[i];
}
a[t] = 0; // 添加下标
double sum = 0;
for(int i = 0; i < t; i++){
if(a[i] == 'C'){
if(a[i+1] > '0' && a[i+1] <='9') // 有下标的话
sum = sum + (a[i+1] - '0')*12.01;
else
sum = sum + 12.01;
}
if(a[i] == 'H'){
if(a[i+1] > '0' && a[i+1] <='9')
sum = sum + (a[i+1] - '0')*1.008;
else
sum = sum + 1.008;
}
if(a[i] == 'O'){
if(a[i+1] > '0' && a[i+1] <='9')
sum = sum + (a[i+1] - '0')*16.00;
else
sum = sum + 16.00;
}
if(a[i] == 'N'){
if(a[i+1] > '0' && a[i+1] <='9')
sum = sum + (a[i+1] - '0')*14.01;
else
sum = sum + 14.01;
}
}
System.out.println(sum);
}
}
其实就是代码多 逻辑还是很简单的,至于最后为什么是添加0不是添加1,我也不是很明白- -,如果有人看的话看出来麻烦评论下或者私信下,谢谢,不想思考了,废了- -。
第三题 UVA1225 输入n个整数 连在一起 例如 123456789101112 要求输入10个整数 求‘0,1,2,3,4,5,6,7,8,9’的个数
难点:
一个数一个数怎么才能加了个位又加其他的位数并且把他保存起来,其实想到了还是挺简单,这题本人不太行没有想到,百度参考了下别人的。 上代码:
import java.util.Scanner;
import java.util.Arrays;
/*
* 输入n个整数 连在一起 例如 123456789101112 要求输入10个整数 求‘0,1,2,3,4,5,6,7,8,9’的个数
*/
public class Test3 {
public static void main(String args[]){
int a[] = new int[10];
Arrays.fill(a,0); //将数组元素全赋值为0
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 1; i <= n; i++){
int j = i;
while(j != 0){//最重要部分 每一个数都分隔出各个位数算一遍 同时利用数组下标直接++
a[j%10]++;
j = j/10;
}
}
for(int b:a)
System.out.print(b+" ");
}
}
如果有什么不妥的地方欢迎大家评论,本人就是一个渣渣二本学生,学校没有校队,自己想参加些比赛,遂刷几个题,但是目前对我感觉挺难的,加油吧,改变不了环境只能改变自己,如果有大佬用java写算法的,大家能给个地址吗。