算法入门第二章练习题(代码片段)

leonardo-xx leonardo-xx     2023-02-20     459

关键词:

 

习题2-1 水仙花数

输出100~999中的所有水仙花数。若3位数ABC满足ABC=A2+B2+C2,则称其为水仙花数。例如:153=12+52+32,所以153是水仙花数。

解析:只有1000个数,直接暴搜就好了。

 

 1 public class Q21 
 2     public static void main(String[] args) 
 3         for (int i = 1; i < 10; i++) 
 4             for (int j = 0; j < 10; j++) 
 5                 for (int k = 0; k < 10; k++) 
 6                     int sum = i * 100 + j * 10 + k;
 7                     if(sum==Math.pow(i,3)+Math.pow(j,3)+Math.pow(k,3))
 8                         System.out.println(sum);
 9                 
10             
11         
12     
13 

知道有一天我看见了

#include <cstdio>
int main (void)

    int first = 1;
    for (int i = 100; i < 1000; i++)
    
        int c = i%10;
        int b = i/10%10;
        int a = i/100;
        if (a*a*a+b*b*b+c*c*c == i)
        
            if (first)
                first = 0;
            else
                printf (" ");
            printf ("%d",i);
        
    
    return 0;

 

      int c = i%10;
        int b = i/10%10;
        int a = i/100;
       
第一次知道 还能这么用一个循环得出三个数
再次强化一个概念 / 取前 %取后

习题2-2 韩信点兵

 

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数a,b,c,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解,即输出No answer)。已知总人数不小于10,不超过100.输入到文件结束为止。

样例输入:

2 1 6

2 1 3

样例输出:

Case 1: 41

Case 2:No answer

 

除了枚举还有一个 

算统的方法 但是感觉有点复杂 就不理解了  

大道至简 解决就好 贴在后面  愿意了解就看看

 

三人同行七十稀,

五数梅花甘一枝,

七子团圆正半月,

除百零五便得知。

甘一是21,正半月是15,除百零五的意思就是求105的余数。可以发现70是5和7的最小公倍数,21是3和7的最小公倍数,15是3和5的最小公倍数,105是3、5、7的最小公倍数。因此这四句口诀的意思就是用任意两数的最小公倍数乘第三个数并求和,对和求105的余数即可得到答案

 

输入正整数n≤20,输入一个n层的倒三角形。例如,n=5时输出如下:

#########

#######

  #####

  ###

    #

import java.util.Scanner;

public class Q22 
    public static void main(String[] args) 
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
        int n = 5;

        for (int i = 0; i < n; i++) 
            for (int j = 0; j < i; j++) 
                System.out.printf(" ");
            
            int k = 2 * (n - i) - 1;
            for (int z = 0; z<k; z++)
                System.out.printf("*");

            System.out.println("");
        
    

和网上的差不多 但是循环套循环 感觉要加强一下 说懂也懂 不懂也很懵

!重新理解一下 循环条件

满足进 不满足不进 

 

 

输入两个正整数,n<m<106,输出1/n2+1/(n+1)2+...+1/m2,保留5位小数。输入包含多组数据,结束标记为n=m=0。提示:本题有陷阱。

样例输入:

2 4

65536 655360

0 0

样例输出:

Case 1: 0.42361

Case 2: 0.00001

public class Q24 

    public static void main(String[] args) 
        double m = 4.0, n = 2.0;
        double sum = 0.0;
        for (double i = n; i <= m; i++) 
            sum += 1 / i * i;
        
        System.out.println(sum);
    

 

习题2-6 排列

用 1,2,3…,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi=1:2:3。按照“abc def ghi”的格式输出所有解,每行一个解。提示:不必太动脑筋。

解析:因为搜索范围是100~999而已,所以提示的意思大概就是让我们直接用暴搜找出符合条件的数就好了。即使是暴搜我们还是可以将范围再缩小一点,根据题目要求,可以用到的最小的数(作为abc)是123,最大的数(作为ghi)是987,由最大数可以根据3个数的比例推算出最小数abc的上限为987÷3=329,因此最小数abc的范围是123~329(如果不缩小范围还需要加一个判断ghi是否大于1000的判断条件,稍加思考即可发现超过329的三位数abc绝大部分对应的三位数ghi都超过了1000,不缩小范围浪费了很多时间)。题目要求1~9这9个数字不能每个只能出现一次,那么输出条件就是三个三位数拆分后的和要正好等于45(1+2+…+9=45)。

public class Q26 
    public static void main(String[] args) 
        for (int i = 123; i <= 329; i++) 
            int j = i * 2;
            int k = i * 3;
            if (isOK(j) == 1 && isOK(k) == 1 &&is2OK(i,j)==1&&is2OK(i,k)==1&&is2OK(j,k)==1)
                System.out.printf(i + " " + i * 2 + " " + i * 3);
                System.out.println();
            

        
    

    private static int isOK(int num) 
        if (num > 100 && num < 999) 
            if (num / 100 != num / 10 % 10 && num / 100 != num % 10 && num / 10 % 10 != num % 10)
                return 1;
            else
                return 0;
         else
            return 0;
    

    private static int is2OK(int n1, int n2) 
        int hun1 = n1 / 100;
        int dec1 = n1 / 10 % 10;
        int uni1 = n1 % 10;
        int hun2 = n2 / 100, dec2 = n2 / 10 % 10, uni2 = n2 % 10;
        if (hun1 != hun2 && hun1 != dec2 && hun1 != uni2 & dec1 != hun2 && dec1 != dec2 && dec1 != uni2 && uni1 != hun2 && uni1 != dec2 && uni1 != uni2)
            return 1;
        else
            return 0;

    

 

功能函数化 很有用 很屌

 





《算法竞赛入门经典(第二版)》习题解答——第二章(代码片段)

文章目录一、习题2-1水仙花数(daffodil)二、习题2-2韩信点兵(hanxin)三、习题2-3倒三角形(triangle)四、习题2-4子序列的和(subsequence)五、习题2-5分数化小数(decimal)六、习题2-6排列࿰... 查看详情

2021算法竞赛入门班第二节课递归分治二分练习题(代码片段)

目录华华给月月准备礼物【二分】TheBiggestWaterProblem【模拟】Bits【递归模拟/未完成】[NOIP2004]FBI树【树的后序遍历】[USACO2009DecS]MusicNotes【二分+前缀和】[NOIP2009]分数线划定【模拟】逆序数【归并排序】逆序对【组合数/推式子】... 查看详情

机器学习入门knn分类算法|附加小练习(代码片段)

目录1.聚类与分类1.1聚类1.2分类2.关于KNN算法2.1`Lp距离`定义:2.1`K`值的选取3.练习第一题:第二题:最后1.聚类与分类1.1聚类聚类是将数据对象的集合分成相似的对象类的过程。使得同一个簇(或类࿰... 查看详情

《算法图解》第二章笔记与课后练习(代码片段)

软件环境:Python 3.7.0b4一、选择排序#找出数组中的最小元素deffindSmallest(arr):#存储最小的值smallest=arr[0]#存储最小元素的索引smallest_index=0foriinrange(1,len(arr)):ifarr[i]<smallest:smallest_index=ismallest=arr[i]returnsmallest 查看详情

☀️机器学习入门☀️图解k-means聚类算法|附加小练习(代码片段)

物以类聚经典的无监督学习算法——K-Means聚类算法目录1.K-Means定义2.K-Means步骤3.K-Means和KNN对比4.小练习4.1第一题4.2第二题4.3第三题最后1.K-Means定义K-means聚类算法首先是随机选取K个对象作为初始的聚类中心,然后计算每个样... 查看详情

算法教程(代码片段)

自学算法第二章本章课程承接作者主页中《自学算法》的第一章内容。这套课程特别适合自学算法的小白。每节课程最后还有一道练习题,边学边练,可以帮你及时巩固学习到的知识。如果您在学习其他相关的算法课程&#... 查看详情

期末复习数据结构与算法练习题(代码片段)

数据结构与算法考试习题第一章求算法复杂度与频率第二章线性表2.2填空题。2.3何时选用顺序表、何时选用链表作为线性表的存储结构为宜?2.7已知L是带表头结点的非空单链表,且P结点既不是首元结点,也不是尾元结点&#... 查看详情

2021算法竞赛入门班第八节课数学习题(代码片段)

目录)最大公约数(lcm)最大公约数(lcm)https://ac.nowcoder.com/acm/problem/16710#include<bits/stdc++.h>usingnamespacestd;typedeflonglongintLL;LLa,b;LLgcd(LLa,LLb)returnb?gcd(b,a%b):a;intmain(void) cin>>a>>b; cout<<a/gcd(a,b)*b; return0; 查看详情

[算法竞赛入门]第二章_循环结构程序设计(代码片段)

第2章循环结构程序设计【学习内容相关章节】2.1for循环2.2循环结构程序设计2.3文件操作2.4小结与习题【学习目标】(1)掌握for循环的使用方法;(2)掌握while循环的使用方法;(3)学会使用计算器和累加器;(4)学会用输出... 查看详情

入门算法递归+循环+异常处理练习2020010301(代码片段)

packageorg.jimmy.autosearch.test;importjava.util.ArrayList;importjava.util.HashMap;publicclassRecursive2020010301publicstaticvoidmain(String[]args)tryArrayList<HashMap<String,Integer>>list=newArrayList<HashMap<String,Integer>>();HashMap<String,Integer>map=newHashMap<... 查看详情

《算法基础学习》进制转换(入门)(代码片段)

目录算法学习《算法零基础100讲》(第19讲)进制转换(一)-入门_英雄哪里出来-CSDN博客https://blog.csdn.net/WhereIsHeroFrom/article/details/120875977习题解题报告例题1例题2例题3例题4例题5例题6例题7算法学习《算法零基础100讲》(第19讲)进制转换... 查看详情

蓝桥杯dfs深度优先练习题——基础入门模板(代码片段)

...录一个系列的文章——传送门【蓝桥杯】DFS深度优先搜索练习题——提高篇(3)_小卢先冲的博客-CSDN博客第一题:入门迷宫问题、第二题:[USACO10OCT]LakeCountingS洪水灌溉问题、第三题:棋盘问题、第四题:[NOIP200... 查看详情

2021算法竞赛入门班第四节课搜索练习题(代码片段)

目录Jelly【简单bfs】maze【建图求最短路】wyh的迷宫【BFS】Jelly【简单bfs】https://ac.nowcoder.com/acm/problem/201613#include<bits/stdc++.h>usingnamespacestd;constintN=110;structnodeintx,y,z,step;;chara[N][N][N];intst[N][N][N],n;intdx[6]=-1,0,0,1,0,0;intdy[6... 查看详情

算法竞赛入门暑期速成计划(代码片段)

算法竞赛入门【暑期速成计划】(二)(文章目录)前言习题训练(码题集)1.赌石【AC代码】#include<iostream>#include<cstdio>#include<cmath>#include<algorithm>usingnamespacestd;typedeflongdoubleLD;LDC_div(intk,intn)LDres=1; 查看详情

2021算法竞赛入门班第七节课图论练习题(代码片段)

目录挖沟【最小生成树板子题】公交线路【最短路板子题】挖沟【最小生成树板子题】https://ac.nowcoder.com/acm/problem/17509#include<bits/stdc++.h>usingnamespacestd;structnodeinta,b,c;temp;boolcmp(nodea,nodeb)returna.c<b.c;constintN=1e5+10;intn... 查看详情

算法入门线性迭代(简单-第二题)leetcode206(代码片段)

🙉饭不食,水不饮,题必须刷🙉还不会C语言,和我一起打卡!🌞《光天化日学C语言》🌞LeetCode太难?上简单题!🧡《C语言入门100例》🧡LeetCode太简单?大神盘他!🌌... 查看详情

算法入门双指针(中等-第二题)leetcode567(代码片段)

🙉饭不食,水不饮,题必须刷🙉还不会C语言,和我一起打卡!🌞《光天化日学C语言》🌞LeetCode太难?上简单题!🧡《C语言入门100例》🧡LeetCode太简单?大神盘他!🌌... 查看详情

算法入门广度优先搜索(中等-第二题)leetcode116(代码片段)

🙉饭不食,水不饮,题必须刷🙉还不会C语言,和我一起打卡!🌞《光天化日学C语言》🌞LeetCode太难?上简单题!🧡《C语言入门100例》🧡LeetCode太简单?大神盘他!🌌... 查看详情