一周算法入门练习总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


总结

这一周就要面临蓝桥杯考试了,但我却怎么也重视不起来,可能是自己功底太差了吧,想获奖实力也不允许,也没有什么动力,更不知道这一段时间练习算法的意义。我甚至还网上搜索了写算法题有什么用。网上的回答也就是面试的时候考官会问如果自己算法功底强的话可以惊艳考官,然后写算法可以锻炼自己的思维能力,良好的思维能力在生活的多个方面来说都是一种优势吧,可对于我来说,我毕业不慌着马上找工作所以练习算法在这方面只能说一个更加更加更加长远的准备而已,在锻炼思维方面,我想我学习高数、离散、物理来锻炼思维不是更香?既能保障我期末拿个好成绩又对我考研有利。所以也因此,我对写算法题还是没太多的动力。
但毕竟交了300块而且小组这一段也留了时间让练习算法,自己或多或少还是要为这次蓝桥杯比赛做点准备。当然任何东西刚入门都是很难的,也因此,我每看一道基础的算法题读完题后都是去网上搜别人咋写,因为自己没思路…


下面便是最近我写的几道基础题的心得体会

一、进制转换问题

蓝桥杯题库中有三道基础的进制转换
1.16进制转10进制

import java.math.BigInteger;
import java.util.Scanner;

public class Main {
    public static void main (String[]args) {
    	  Scanner sc = new Scanner(System.in);
    	 String str = sc.nextLine();
    	 BigInteger s = new BigInteger(str,10); 
    	 String r = s.toString(16).toUpperCase();
    	 System.out.println(r);
    	  
      }
}

因为输入中涉及字母所以先用字符串接收,又因为tostring()方法括号里是什么就能转换成什么类型,但前提是对int类型转换,而且本题的数可以取到很大超出int类型范围,所以用BigInteger合适同时要注意输出格式为大写字母所以用到了.toUpperCase()方法。

  1. 10进制转16进制
import java.math.BigInteger;
import java.util.Scanner;

public class Main2 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		String str = sc.nextLine();
		BigInteger r = new BigInteger(str,16);
		System.out.println(r);
	}

}

这个思路跟上面类似也没啥说的
3.16进制转8进制

import java.math.BigInteger;
import java.util.Scanner;

public class Main2 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		int a = sc.nextInt();
		for(int i=0;i<a;i++) {
		String r = sc.next();
		BigInteger s = new BigInteger(r,16);
		String t = s.toString(8);
		System.out.println(t);
		}
	
	}
}

总之,这一个类似的思路可以解决这样的进制转换问题

二、特殊回文数

1.方法一

代码如下:

import java.util.Scanner;
public class Main3 {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n =scanner.nextInt();
		for(int i=10000;i<=999999;i++ ){
			if(i>100000) {
			int a = i/100000%10;
			int b = i/10000%10;
			int c = i/1000%10;
			int d = i/100%10;
			int e = i/10%10;
			int f = i%10;
			if(a==f&&b==e&&c==d&&a+b+c+d+e+f==n) {
				System.out.println(i);
			}
			
			}else {
				int a =i/10000%10;
				int b =i/1000%10;
				int c =i/100%10;
				int d =i/10%10;
				int e =i%10;
				if(a==e&&b==d&&a+b+c+d+e==n) {
					System.out.println(i);
				}
				
			}
			
			}	
			}				
	}

这中方法就是把每个数字都表示出来,分别考虑各自满足的情况

2.方法二

代码如下(示例):

import java.util.Scanner;

public class Main4 {
	public static void main(String[] args) {
		Scanner sc =new Scanner(System.in);
		
		int n = sc.nextInt();
		for(int i =1;i<=9;i++) {
		for(int j =0;j<=9;j++) {
		for(int k =0;k<=9;k++) {
			if(2*(i+j)+k==n) {
				System.out.println(i*10000+j*1000+k*100+j*10+i);}
		
		}	
		}
		}
		for(int i =1;i<=9;i++) {
		for(int j =0;j<=9;j++) {
		for(int k =0;k<=9;k++) {
			if(2*(i+j+k)==n) {
		
			System.out.println(i*100000+j*10000+k*1000+k*100+j*10+i);}				
		}
		}
	}

}
		}

这种是考虑一半的情况逐一考虑然后最后求出结果


尾言

还有几道算法题记录在自己的笔记中如果有时间再写在博客中把。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值