做题记录(1)

文章包含四个Java编程示例,涉及石子问题、DNA序列修正(替换错误碱基)、漆房涂色优化和物品计数挑战,展示了基础数据结构和算法的应用。
摘要由CSDN通过智能技术生成

1.无尽的石头

	public static void main(String[] args)
	{
		Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
		int t=scan.nextInt();//t个询问
		int []n=new int[t];
		for(int i=0;i<t;i++)
		{
			n[i]=scan.nextInt();//n[i]为目标石头
		}
		for(int i=0;i<t;i++)//遍历询问
		{
			int cnt=0;//计步
			int stone=1;//初始石头编号
			while(stone<n[i])
			{
				int x=0;//x为n的各位数字之和
				String str=stone+"";
				char []c=str.toCharArray();
				for(int j=0;j<c.length;j++)
				{
					x+=c[j]-'0';//每一位的数累加
				}
				stone+=x;
				cnt++;
				if(stone==n[i])
				{
					System.out.println(cnt);
					break;
				}
				else if(stone>n[i])
				{
					System.out.println("-1");
					break;
				}
			}
		}
        scan.close();
    }

2.DNA序列修正

import java.util.*;

public class Main
{
    static char com(char x)
    {
      char y=0;
      if(x=='A')
        y='T';
      if(x=='T')
        y='A';
      if(x=='C')
        y='G';
      if(x=='G')
        y='C';
      return y;
    }
    public static void main(String[] args) 
    {
      Scanner scan = new Scanner(System.in);
      //在此输入您的代码...
      int n=scan.nextInt();
      char []dna1=scan.next().toCharArray();
      char []dna2=scan.next().toCharArray();
      char []a=new char[n];
      char t;
      int cnt=0;
      int i,j;
      for(i=0;i<n;i++)
        a[i]=com(dna1[i]);
      for(i=0;i<n;i++)
      {
        if(a[i]!=dna2[i])
        {
          for(j=i+1;j<n;j++)
          {
            if(dna2[j]==a[i]&&dna2[i]==a[j])
                    //第二个条件不写的话部分测试样例通不过
            {
              t=dna2[i];
              dna2[i]=dna2[j];
              dna2[j]=t;
              cnt++;
              break;
            }
          }
          if(j==n&&a[i]!=dna2[i])
          {
            dna2[i]=a[i];
            cnt++;
          }
        }
      }
      System.out.print(cnt);
      scan.close();
    }
}

3.小蓝的漆房

	public static void main(String[] args)
	{
		Scanner scan = new Scanner(System.in);
        //在此输入您的代码...
		int t=scan.nextInt();
		for(int i=0;i<t;i++)
		{
			int n=scan.nextInt();//房子个数
			int k=scan.nextInt();//一天涂的区间长度
			int[] a=new int[n];
			for(int j=0;j<n;j++)
			{
				a[j]=scan.nextInt();//房子的颜色
			}
			int ans=99999;
			for(int h=1;h<=60;h++)//遍历每一种颜色
			{
				int cnt=0;//记录天数
				for(int j=0;j<n;j++)
				{
					if(a[j]!=h)
					{
						cnt++;
						j+=k-1;
					}
				}
				ans=Math.min(ans,cnt);
			}
			System.out.println(ans);
		}
        scan.close();
    }

4.小蓝和小桥的挑战

public static void main(String[] args) 
  {
    Scanner scan = new Scanner(System.in);
    //在此输入您的代码...
    int t=scan.nextInt();
		for(int i=0;i<t;i++)
		{
			int cnt=0,sum=0;
			int n=scan.nextInt();//物品数量
			int[] a=new int[n];
			for(int j=0;j<n;j++)
			{
				a[j]=scan.nextInt();
				sum+=a[j];
				if(a[j]==0)
				{
					cnt++;
					sum++;// !一开始这步没写,执行操作后所记的价值也随之+1
				}
			}
			if(sum==0)
				cnt++;
			System.out.println(cnt);
		}
      scan.close();
  }

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值