UVa 1585 UVa1586 UVa 1225 学习总结

来自一个渣渣的学习记录,也不知道为什么,好像没看到人用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写算法的,大家能给个地址吗。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值