IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 蓝桥杯31天冲刺 Day4 -> 正文阅读

[数据结构与算法]蓝桥杯31天冲刺 Day4

奇数倍数

链接: 奇数倍数

在这里插入图片描述
直接暴力枚举就好了

代码:

import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改

public class Main {
    public static void main(String[] args) {
        int i = 3;
        long x = 2019;
        boolean flag=true;
        while(flag){
          long n = i*x;
          char[] chars = Long.toString(n).toCharArray();
          for(int j =0;j<chars.length;j++){
            if((chars[j]-'0')%2==0){
              break;
            }
            if(j==chars.length-1){
              System.out.println(n);
              flag=false;
            }
          }
          i = i+2;
        }
    }
}

第几个幸运数字

链接: 第几个幸运数字.
在这里插入图片描述
直接枚举就好了

相当于要我们求3的k次方和5的j次方和7的i次方相加等于59084709587505
需要注意的是由于较小的数字在前,需要把较小的数放在循环内部(比如把3放在循环最里面)

像这种基本的枚举一定要用循环来写!!!

代码:

import java.util.*;

public class 第几个幸运数字 {

	public static void main(String[] args) {

		long x =59084709587505L;
		//System.out.println(x);
		int count = 0;
		
		for(long i=0;Math.pow(7, i)<x;i++){
			for(long j=0;Math.pow(5, j)<x;j++){
				for(long k=0;Math.pow(3, k)<x;k++){
					if(Math.pow(7, i)*Math.pow(5, j)*Math.pow(3, k)<x){
						count++;
					}
					
				}
			}
		}
		System.out.println(count);
	}

}

四平方和

链接: 四平方和

四平方和定理,又称为拉格朗日定理:
  每个正整数都可以表示为至多4个正整数的平方和。
  如果把0包括进去,就正好可以表示为4个数的平方和。
  比如:
  5 = 0^2 + 0^2 + 1^2 + 2^2
  7 = 1^2 + 1^2 + 1^2 + 2^2
  (^符号表示乘方的意思)
  对于一个给定的正整数,可能存在多种平方和的表示法。
  要求你对4个数排序:
  0 <= a <= b <= c <= d
  并对所有的可能表示法按 a,b,c,d 为联合主键升序排列,最后输出第一个表示法
  程序输入为一个正整数N (N<5000000)
  要求输出4个非负整数,按从小到大排序,中间用空格分开
  例如,输入:
  5
  则程序应该输出:
  0 0 1 2
  再例如,输入:
  12
  则程序应该输出:
  0 2 2 2
  再例如,输入:
  773535
  则程序应该输出:
  1 1 267 838
  资源约定:
  峰值内存消耗 < 256M
  CPU消耗 < 3000ms

这题和上题类似,也是循环枚举。但是,如果写4个循环复杂度很高,我们可以使用分组来枚举,也就是将a,b分成一组,c,d分成一组

由于我们想要尽可能缩小搜索范围,我们就应该先确定较大的数,通过将较大两位数(c,d)与计算的数(n)相减,就可以确定较小两位数(a,b)的确定值了。实现这一过程的代码如下:

    if(hash.containsKey(n-t)){
        Node node =hash.get(n-t);
	    System.out.println(a+" "+b+" "+node.c+" "+node.d);
	    return;
	  }

还有很重要的一点就是:我们需要记录下最先枚举的c,d的平方和的值还有它们各自的取值。
这点我们很容易想到使用HashMap来解决。同时value只能接受一种类型,我们再额外写一个Node类就可以解决。

map的创建和Node类的写法如下:

Map<Integer,Node> hash = new HashMap<Integer,Node>();
---------------------------------------------------------------
class Node{
	int c;
	int d;
	
	public Node(int c,int d){
		this.c = c;
		this.d = d; 
	}
}

整体解题代码:

import java.util.*;

public class 四平方和 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map<Integer,Node> hash = new HashMap<Integer,Node>();
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
        
		for(int c=0;c*c<n;c++){
			for(int d=c;d*d+c*c<=n;d++){
				int t =d*d+c*c;
				if(!hash.containsKey(t)){
					hash.put(t, new Node(c,d));
				}
			}
		}
		
		for(int a=0;a*a<n;a++){
			for(int b=a;b*b+a*a<=n;b++){
				int t = b*b+a*a;
				if(hash.containsKey(n-t)){
					Node node =hash.get(n-t);
					System.out.println(a+" "+b+" "+node.c+" "+node.d);
					return;
				}
			}
		}
		
	}

}

class Node{
	int c;
	int d;
	
	public Node(int c,int d){
		this.c = c;
		this.d = d; 
	}
}

思路参考: 【蓝桥真题4】练练填空就想进国赛?拿下大题才能让你真正有底气(蓝桥31日冲刺打卡).

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:47:47  更:2022-03-12 17:47:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 13:41:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码