HNU-Java程序设计基础训练-2023
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)
【问题描述】
开发一个密码检查软件,密码要求:
-
长度超过8位
-
包括大小写字母.数字.其它符号,以上四种至少三种
-
不能有相同长度大于或等于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]+" "); //输出状态
}
}
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!