HNU-Java程序设计基础训练-2023

2024-01-01 19:27:32
1.DNA序列(Java)

【问题描述】?

一个DNA序列由A/C/G/T四个字母的排列组合组成。G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度)。在基因工程中,这个比例非常重要。因为高的GC-Ratio可能是基因的起始点。

给定一个很长的DNA序列,以及要求的最小子序列长度,研究人员经常会需要在其中找出GC-Ratio最高的子序列。

【输入形式】输入一个string型基因序列,和int型子串的长度

【输出形式】找出GC比例最高的子串,如果有多个输出第一个的子串

【样例输入】AACTGTGCACGACCTGA 5

【样例输出】GCACG

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        String str= input.next();
        int n=input.nextInt();
        int num=0;
        int index=0;
        for (int i = 0; i < str.length()-n; i++) {
            int m=0;
            for (int j = i; j <i+n ; j++) {
                if (str.charAt(j)=='C'||str.charAt(j)=='G'){
                    m++;
                }
            }
            if (m>num){
                num=m;
                index=i;
            }
        }
        System.out.println(str.substring(index,index+n));
    }

}

2.求近似数(JAVA)

【问题描述】

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

【输入形式】

输入一个正浮点数值

【输出形式】

输出该数值的近似整数值

【样例输入】

5.5

【样例输出】

6

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        float num=input.nextFloat();
        System.out.println(getint(num));
    }
    public static int getint(float n){
        int a=(int) n;
        if ((n-a)>=0.5){
            a+=1;
        }
        return a;
    }

}

3.?密码检查(JAVA)

【问题描述】

开发一个密码检查软件,密码要求:

  1. 长度超过8位

  2. 包括大小写字母.数字.其它符号,以上四种至少三种

  3. 不能有相同长度大于或等于2的子串重复

【输入形式】

一组或多组长度超过2的子符串。每组占一行

【输出形式】

如果符合要求输出:OK,否则输出NG

【样例输入】

021Abc9000

021Abc9Abc1

021ABC9000

021$bc9000
【样例输出】

OK

NG

NG

OK

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner input=new Scanner(System.in);
        while (input.hasNext()){
            String str=input.next();
            int l=str.length();
            if (l<=8){
                System.out.println("NG");
                continue;
            }

            char[] chars = str.toCharArray();
            int countadz = 0;
            int countAdZ = 0;
            int count0d9 = 0;
            int countOthers = 0;
            for (int i = 0; i < l; i++) {
                if (Character.isDigit(chars[i])) count0d9=1;
                if (Character.isUpperCase(chars[i])) countAdZ=1;
                if (Character.isLowerCase(chars[i])) countadz=1;
                if ((Character.isLowerCase(chars[i])==false)&&(Character.isUpperCase(chars[i])==false)&&(Character.isDigit(chars[i])==false)) countOthers=1;
            }
            if (count0d9+countAdZ+countadz+countOthers<3) {
                System.out.println("NG") ;
                continue;
            }
            int flag=0;
            for (int i = 0; i < l - 2; i++) {
                String sub = str.substring(i, i+2);
                    if (str.substring(i+2,l).contains(sub)) {
                        flag=1;
                    }
            }
            if (flag==1) {
                System.out.println("NG");
            }else {
                System.out.println("OK");
            }
        }
    }

}

4.?选美比赛(Java)

【问题描述】在选美大奖赛的半决赛现场,有n名选手(2<n<100)参加比赛。比赛结束时,要在现场按照选手的出场顺序宣布最后名次,获得相同分数的选手具有相同的名次,名次连续编号,不用考虑同名次的选手人数。如: </div> <div> 选手数量: 7 选手得分: 5,3,4,7,3,5,6宣布名次: 3,5,4,1,5,3,2 请编程帮助大奖赛组委会完成半决赛的评分排名工作。

【输入形式】选手数量:7?选手得分:5;3;4;7;3;5;6

【输出形式】选手的排名:3 5 4 1 5 3 2

【样例输入】7 5 3 4 7 3 5 6

【样例输出】3 5 4 1 5 3 2?

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        int[] arr=new int[n];
        int[] copy=new int[n]; //去重数组
        for(int i=0;i<n;i++){
            arr[i]=sc.nextInt();
            copy[i]=arr[i];
        }
        for(int i=0;i<n;i++){
            for(int j=i+1;j<n;j++){
                if(arr[i]==copy[j]){
                    copy[j]=0; //置为0 ,去除重复元素
                }
            }
        }
        for(int i=0;i<n;i++){
            int tem=1;
            for(int j=0;j<n;j++){
                if(arr[i]<copy[j]){ //判断有几个比他大
                    tem++;
                }
            }
            System.out.print(tem+" ");
        }

    }
}

5.?情报加密(JAVA)

【问题描述】

在情报传递过程中,为了防止情报被截获,往往需要对情报用一定的方式加密,简单的加密算法虽然不足以完全避免情报被破译,但仍然能防止情报被轻易的识别。我们给出一种最简的的加密方法,对给定的一个字符串,把其中从a-y,A-Y的字母用其后继字母替代,把z和Z用a和A替代,则可得到一个简单的加密字符串。

【输入形式】

可能有多组测试数据。每组测试数据的第一行是字符串的数目n,其余n行每行一个字符串,每个字符串长度小于80个字符。

【输出形式】

对于每组数据,输出每行字符串的加密字符串。

【样例输入】

1

Hello! How are you!
【样例输出】

Ifmmp! Ipx bsf zpv!

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt();
        sc.nextLine();
        for (int i = 0; i < n; i++) {
            char[] arr=sc.nextLine().toCharArray();
            for(int j=0;j<arr.length;j++){
                if(arr[j]=='z'){
                    arr[j]='a';
                }else if(arr[j]=='Z'){
                    arr[j]='A'; //特殊情况判断
                }else if((arr[j]>='a' && arr[j]<='z')||(arr[j]>='A' && arr[j]<='Z')){
                    arr[j]+=1; //确保是字母,然后后移 //字符与数字相加,会先将字符转换成ASCII然后相加
                }
            }
            System.out.println(arr);
        }
    }
}

6.?骰子问题旋转(java)

【问题描述】?

骰子是个立方体每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态。放置在平面上,用L表示向左翻转一次,用R表示向右翻转一次,用F表示向前翻转一次,用B表示向后翻转一次,用A表示逆时针旋转90度,用C表示顺时针旋转90度,现从初始状态开始,根据输入的动作序列,计算得到最终的状态。

【输入形式】输入只包含LRFBAC的字母序列,最大长度为50,可重复

【输出形式】输出经过一系列操作后的序列 ?注:按左右前后上下顺序输出

【样例输入】LB

【样例输出】5 6 1 2 3 4

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] arr = sc.nextLine().toCharArray(); //字符数组
        int[] now = {1, 2, 3, 4, 5, 6};  // 当前状态数组
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == 'C') {
                int t1=now[0];  //列出所有情况
                now[0]=now[2];
                now[2]=now[1];
                now[1]=now[3];
                now[3]=t1;
            }else if(arr[i]=='A'){
                int t1=now[0];
                now[0]=now[3];
                now[3]=now[1];
                now[1]=now[2];
                now[2]=t1;
            }else if(arr[i]=='F'){
                int t1=now[2];
                now[2]=now[4];
                now[4]=now[3];
                now[3]=now[5];
                now[5]=t1;
            }else if(arr[i]=='B'){
                int t1=now[2];
                now[2]=now[5];
                now[5]=now[3];
                now[3]=now[4];
                now[4]=t1;
            }else if(arr[i]=='L'){
                int t1=now[4];
                now[4]=now[1];
                now[1]=now[5];
                now[5]=now[0];
                now[0]=t1;
            }else if(arr[i]=='R'){
                int t1=now[4];
                now[4]=now[0];
                now[0]=now[5];
                now[5]=now[1];
                now[1]=t1;
            }
        }
        for(int i=0;i<6;i++){
            System.out.print(now[i]+" "); //输出状态
        }

    }
}

文章来源:https://blog.csdn.net/hhxxttx_/article/details/135307525
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。