网站建设大赛策划书,郴州新网交友,wordpress 手机 登陆不了,制作个人业务网站在做算法题的过程中最忌讳的就是上来就一顿乱敲#xff0c;一开始我就是这样#xff0c;但随着不断的刷题和老师的指导#xff0c;总结了自己的刷题方法 示例题目 三角回文数 问题描述 对于正整数 n, 如果存在正整数 k使得 n123...kk(k1)/2 , 则 n 称为三角数。例如, 66066 … 在做算法题的过程中最忌讳的就是上来就一顿乱敲一开始我就是这样但随着不断的刷题和老师的指导总结了自己的刷题方法 示例题目 三角回文数 问题描述 对于正整数 n, 如果存在正整数 k使得 n123...kk(k1)/2 , 则 n 称为三角数。例如, 66066 是一个三角数, 因为 66066123...363 如果一个整数从左到右读出所有数位上的数字, 与从右到左读出所有数位 上的数字是一样的, 则称这个数为回文数。例如, 66066 是一个回文数, 8778 也是一个回文数。 如果一个整数 nn 既是三角数又是回文数, 我们称它为三角回文数。例如 66066 是三角回文数。 请问, 第一个大于 20220514 的三角回文数是多少? 答案提交 这是一道结果填空的题, 你只需要算出结果后提交即可。本题的结果为一 个整数, 在提交答案时只填写这个整数, 填写多余的内容将无法得分。 运行限制 最大运行时间1s 最大运行内存: 256M 1. 读题【不着急实现代码先理清思路】 通过看题我们能够大致抽象出应该会用到的方法不管方法多简单都尽量写一个函数这样可读性好一些不要直接在main函数里面实现某个方法看着就乱。 这道题我们可以总结可能用到的方法如下 1.判断是不是回文数 【用双指针法判断】 2. 从1到k的值 【优化初始值再暴力循环】 3. 是否满足题中所给的公式 (k*(k1)/2)sum 【不需要算法】
2. 搭架子 架子搭建好就理理逻辑看看main函数中的代码逻辑走不走得通 3. 实现代码 3.1 双指针法判断回文数【两个指针一个 i 一个 j 两端往中间逼近不需要考虑字符串是奇数长度还是偶数】
//判断是不是回文数public static boolean isNum(int num){String val num;int i 0;int j val.length()-1;char[] check val.toCharArray();while(ij){if(check[i] ! check[j]){return false;}i;j--;}return true;} 3.2 从1加到k优化
public static int sumToK(int k){for(int i1;ik;i){res i;}return res;} 先运行一遍求sumToK(k)比题中给的20220514大的值所对应的k是多少【因为并没有一个sumToK(k) 202220514】得到6359sumToK635920221620 优化我们设置初始值为 20221620这样每次循环就不需要从1加到k了极大降低时间消耗
public static int sumToK(int k){int res 20221620;for(int i6360;ik;i){res i;}return res;} main函数优化: 我们应该先判断 sumToK(k) 是不是回文串而不是先判断是否满足那个公式因为这样直接可以过滤一大批不合格的数
完整代码
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {//从20220514开始遍历for(int k6359;;k){int sum sumToK(k);//先满足是回文串if(!isNum(sum)){continue;}//判断是不是我们要找的数if(ifFit(sum,k)){System.out.println(sum);break;}}}//判断是不是回文数public static boolean isNum(int num){String val num;int i 0;int j val.length()-1;char[] check val.toCharArray();while(ij){if(check[i] ! check[j]){return false;}i;j--;}return true;}//返回1到k的和public static int sumToK(int k){int res 20221620;for(int i6360;ik;i){res i;}return res;}//判断sum和k是否满足 k(k1)/2public static boolean ifFit(int sum,int k){return sum((k*(k1))/2)?true:false;}
}