首页
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
Search
1
职教云小助手重构更新,职教云助手最新版下载地址【已和谐】
13,378 阅读
2
职教云-智慧职教,网课观看分析(秒刷网课)
10,990 阅读
3
gradle-5.4.1-all.zip下载
8,882 阅读
4
职教云-智慧职教,签到补签分析(逆天改命系列)
7,836 阅读
5
一个优秀的程序员从写文档开始:免费领14个月语雀云笔记会员
6,875 阅读
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
登录
/
注册
Search
Lan
累计撰写
624
篇文章
累计收到
617
条评论
首页
栏目
学习笔记
Web
Python
转载文章
算法刷题
JS逆向
综合笔记
安卓
物联网
Java
C
资源收集
软件收藏
网络资源
影视专辑
TED英语角
随便写写
随手拍
页面
畅所欲言
友情链接
壁纸大全
数据统计
推荐
工具箱
在线白板
搜索到
624
篇与
的结果
2020-03-29
Java类排序
Java类排序 今天上课,老师讲到Arrays.sor()的时候说,这个可以对数组进行排序,于是当时脑海中立刻浮现出两个问题:一、如果对类排序,一定要把实现什么接口。二、实现了这个接口,Java怎么知道一个类是否实现了某个接口。于是带着这个问题做了一翻查找。 对于类数组排序,调用Arrays.sort()即可,但是也只是对于基本类型的支持,如果对类进行排序,有如下两种方法: 方法一,该类一定要实现Comparable<T>接口,并且实现public int compareTo(T o);方法。比较结果大的返回1,相等返回0,小于返回-1。该接口实现了泛型,如果声明,则compareTo的参数则为Object。实体类Student:public class Student implements Comparable<Student>{ private String name = null; private int age = 0; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return String.format("Name=%s Age=%d", this.name, this.age); } @Override public int compareTo(Student o) { // 按名字排序 return this.name.compareTo(o.getName()); } }声明一个Student数组,并且调用Arrays.sort()进行排序,然后输出Student[] stus = new Student[3]; stus[0] = new Student("Flowers", 12); stus[1] = new Student("Boys", 13); stus[2] = new Student("Zero", 21); Arrays.sort(stus); for(Student s : stus){ System.out.println(s.toString()); }结果:Name=Boys Age=13Name=Flowers Age=12Name=Zero Age=21 方法二,如果Student类并未实现Comparable<T>接口,则在调用Arrays.sort()时,要指定一个“比较器”,一个接口类Comparator<T>,所以使用时同时要写出实现intcompare(T o1, T o2);方法的代码。调用代码如下:Arrays.sort(stus, new Comparator<Student>(){ @Override public int compare(Student o1, Student o2) { return o1.getName().compareTo(o2.getName()); } } }对于集合的排列,如ArrayList等实现了Collection<T>接口,List<T>是继承于Collection<T>,所以实现List<T>的同样适用。集合类的排序主要是用Collections.sort方法,Collections和Collection是不一样的,前者是类,后者是接口。一般我们主要使用两个方法: 1.Collection.sort(List arg0); 这种是最简单的一种排序方法,只需要实现他的Comparable 接口及实现public int compareTo(Object arg0)方法即可。ArrayList<Student> list = newArrayList<Student>(3); list.add(new Student("Flowers", 36)); list.add(new Student("Dog", 23)); list.add(new Student("About", 67)); Collections.sort(list); 2.Collection.sort(List arg0,Comparator arg1) 这种加入了比较器,具有更大的灵活性,便于管理,比较器可作为内部静态类的,以便于管理。比较器必须实现Comparator接口。Collections.sort(list, new Comparator<Student>(){ @Override public int compare(Student o1, Student o2) { // 按年龄排序 return o1.getAge() > o2.getAge()? 1:(o1.getAge() ==o2.getAge()? 0: -1); } }); 以上两种方法,得到的结果都一样:Name=Dog Age=23Name=Flowers Age=36Name=About Age=67 查看Collection.sort的源代码,不难看出Java的思路,先讲集合类转化为数组,然后调用Arrays.sort方法进行排序,同时传递过去比较器,最后利用集合的迭代器将结果赋值回集合类中。public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list.toArray(); Arrays.sort(a, (Comparator)c); ListIterator i = list.listIterator(); for (int j=0; j<a.length; j++) { i.next(); i.set(a[j]); } }
2020年03月29日
1,048 阅读
3 评论
0 点赞
2020-03-29
试题 算法提高 书院主持人
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 北大附中书院有m个同学,他们每次都很民主地决策很多事情。按罗伯特议事规则,需要一个主持人。同学们民主意识强,积极性高,都想做主持人,当然主持人只有一人。为了选出主持人,他们想到了一个办法并认为很民主。方法是: 大家围成一圈,从1到m为每个同学编号。然后从1开始报数, 数到n的出局。剩下的同学从下位开始再从1开始报数。最后剩下来的就是主持人了。现在已经把同学从1到m编号,并约定报数为n的出局,请编程计算一下,哪个编号的同学将会成为主持人。输入格式 一行,由空格分开的两个整数m n。输出格式 一个整数,表示主持人的编号样例输入15 3样例输出5样例输入200 55样例输出93数据规模和约定 10000>m>0; 100>n>0; 时间限制1.0秒我已知的两种解题方法:1,循环import java.util.Scanner; public class 书院主持人循环 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt()-1; boolean[] result = new boolean[n]; for (int i = 0; i < n; i++) { result[i] = true; } int count = n; int num =0; if (m==0) { System.out.println(n); }else { while(count!=1){ for (int i = 0; i < result.length; i++) { if (result[i]) { if (num==m) { result[i]=false; num=0; count--; }else { num++; } } } } for (int i = 0; i < result.length; i++) { if (result[i]) { System.out.println(i+1); } } } } }2,递归(还不会)import java.util.*; public class 书院主持人 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int m = sc.nextInt(); System.out.println(zcr(m,n)); } public static int zcr(int n,int m){ if (m==1) { return m; } return (zcr((m-1),n)+n-1)%m+1; } }这个题就是所谓的约瑟夫环,约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。例如N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。分析:(1)由于对于每个人只有死和活两种状态,因此可以用布尔型数组标记每个人的状态,可用true表示死,false表示活。(2)开始时每个人都是活的,所以数组初值全部赋为false。(3)模拟杀人过程,直到所有人都被杀死为止。
2020年03月29日
696 阅读
0 评论
1 点赞
2020-03-28
算法提高 成绩排序
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 给出n个学生的成绩,将这些学生按成绩排序, 排序规则,优先考虑数学成绩,高的在前;数学相同,英语高的在前;数学英语都相同,语文高的在前;三门都相同,学号小的在前输入格式 第一行一个正整数n,表示学生人数 接下来n行每行3个0~100的整数,第i行表示学号为i的学生的数学、英语、语文成绩输出格式 输出n行,每行表示一个学生的数学成绩、英语成绩、语文成绩、学号 按排序后的顺序输出样例输入21 2 32 3 4样例输出2 3 4 21 2 3 1数据规模和约定 n≤100import java.util.*; public class 成绩排序 { public static class student { public int math; public int engilsh; public int chinese; public int id; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc = new Scanner(System.in); int n = sc.nextInt(); student[] student = new student[n]; for (int i = 0; i < n; i++) { student[i] = new student(); student[i].math = sc.nextInt(); student[i].engilsh = sc.nextInt(); student[i].chinese = sc.nextInt(); student[i].id = i + 1; } for (int i = 0; i < student.length; i++) { for (int j = i; j < student.length; j++) { if (student[i].math < student[j].math) { student temp = student[i]; student[i] = student[j]; student[j] = temp; }else if (student[i].math==student[j].math) { if (student[i].engilsh<student[j].engilsh) { student temp = student[i]; student[i] = student[j]; student[j] = temp; }else if (student[i].engilsh==student[j].engilsh) { if (student[i].chinese<student[j].chinese) { student temp = student[i]; student[i] = student[j]; student[j] = temp; }else if (student[i].chinese==student[j].chinese) { if (student[i].id>student[j].id) { student temp = student[i]; student[i] = student[j]; student[j] = temp; } } } } } } for (int i = 0; i < student.length; i++) { System.out.println(student[i].math + " " + student[i].engilsh + " " + student[i].chinese + " " + student[i].id); } } }
2020年03月28日
838 阅读
0 评论
0 点赞
2020-03-28
试题 算法提高 成绩排名
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决这个问题。输入格式 第一行包含一个正整数N,表示有个人参加了考试。接下来N行,每行有一个字符串和一个正整数,分别表示人名和对应的成绩,用一个空格分隔。输出格式 输出一共有N行,每行一个字符串,第i行的字符串表示成绩从高到低排在第i位的人的名字,若分数一样则按人名的字典序顺序从小到大。样例输入3aaa 47bbb 90ccc 70样例输出bbbcccaaa 【数据规模和约定】人数<=100,分数<=100,人名仅包含小写字母。import java.util.*; public class 成绩排名 { public static class student{ public String name; public int grade; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); int n = input.nextInt(); student[] stu = new student[n]; for (int i = 0; i < stu.length; i++) { stu[i] = new student(); stu[i].name = input.next(); stu[i].grade = input.nextInt(); } for (int i = 0; i < stu.length-1; i++) { for (int j = 0; j < stu.length-1-i; j++) { if (stu[j].grade<stu[j+1].grade) { student temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; }else if (stu[j].grade==stu[j+1].grade) { int k =0; while (stu[j].name.charAt(k)==stu[j+1].name.charAt(k)) { k++; if (stu[j].name.length()==k) { k--; break; } } if (stu[j].name.charAt(k)>stu[j+1].name.charAt(k)) { student temp = stu[j]; stu[j] = stu[j+1]; stu[j+1] = temp; } } } } for (int i = 0; i < stu.length; i++) { System.out.println(stu[i].name); } } }
2020年03月28日
1,175 阅读
0 评论
0 点赞
2020-03-28
试题 算法提高 双十一抢购
资源限制时间限制:1.0s 内存限制:256.0MB问题描述 一年一度的双十一又来了,某网购网站又开始了半价销售的活动。 小G打算在今年的双十一里尽情地购物,以享受购买的极度快感,她已经列好了她想买的物品的列表。 当然小G并不是出身富贵家庭,所以她网银里的钱只是一个有限的整数S(单位:元)。 这次抢购她打算遵循这三个原则选择每一个物品: 1.先买能“赚”最多的; 2.在“赚”一样多的情况下,先买最便宜的(这样买的东西就可能更多了); 3.在前两条里都判断不了购买顺序的话,先购买在列表里靠前的。 (由于网站里还是有一部分商品并没有打五折,所以2的情况(“赚”的钱数为0)是完全可能发生的) 现在,在双十一的这一天,你要帮小G编写一个程序,来看看她应该去买她列表里的哪些物品。(总价格不要超过S哦) 要是帮她写好这个程序的话,或许你能在光棍节这一天里赢得她的芳心哦~输入格式 输入共N+1行。 第一行包含两个整数S和N,S表示小G的可用金额,N表示她看上的物品个数。 接下来N行,对应每一个物品,每行有两个整数a和b,a是物品的原价(单位:元),b为0或1,若b为0,则此物品不半价,若b为1,则此物品半价销售。输出格式 输出共一行,为小G要买的物品序号(从1开始),用空格隔开,注意按序号从小到大输出。 若小G一件都买不了,则输出0.样例输入10 35 04 010 1样例输出2 3样例输入10 311 021 1100 1样例输出0数据规模和约定 0<S<=10000,0<N<=1000,每一个a和b满足0<a<=1000且b=0或1。import java.util.*; public class 双十一抢购 { public static class goods { public int num; public double price; public int off; } public static void main(String[] args) { // TODO Auto-generated method stub Scanner input = new Scanner(System.in); double money = input.nextDouble(); int Nums = input.nextInt(); goods[] lists = new goods[Nums]; for (int i = 0; i < lists.length; i++) { lists[i] = new goods(); lists[i].price = input.nextDouble(); lists[i].off = input.nextInt(); lists[i].num = i + 1; } for (int i = 0; i < lists.length; i++) { for (int j = i; j < lists.length; j++) { if (lists[i].off * lists[i].price < lists[j].off * lists[j].price) { goods temp = lists[j]; lists[j] = lists[i]; lists[i] = temp; } else if (lists[i].off * lists[i].price == lists[j].off * lists[j].price) { if (lists[i].price > lists[j].price) { goods temp = lists[j]; lists[j] = lists[i]; lists[i] = temp; } else if (lists[i].price == lists[j].price) { if (lists[i].num > lists[j].num) { goods temp = lists[j]; lists[j] = lists[i]; lists[i] = temp; } } } } } List<Integer> result = new ArrayList<Integer>(); int success =0; for (goods goods : lists) { double price =goods.price-goods.off*0.5*goods.price; if (price<=money) { money-=price; success++; result.add(goods.num); } } if (success==0) { System.out.println("0"); }else { Collections.sort(result); for (Integer integer : result) { System.out.print(integer+" "); } } } }思路来源:generous~
2020年03月28日
1,046 阅读
0 评论
0 点赞
2020-03-28
python调用JS方法
接口测试过程中遇到了DES加密的问题,用PYTHON研究了好久都没成功,最后找前端要了des加密的js方法,于是就研究了一下操作步骤如下1、先安装 也可以PIP安装安装后代码如下import execjs def get_des_psswd(data, key): jsstr = get_js() ctx = execjs.compile(jsstr) #加载JS文件 return (ctx.call('strEnc', data, key)) #调用js方法 第一个参数是JS的方法名,后面的data和key是js方法的参数 def get_js(): f = open("./../lib/des.js", 'r', encoding='utf-8') # 打开JS文件 line = f.readline() htmlstr = '' while line: htmlstr = htmlstr+line line = f.readline() return htmlstr if __name__ == '__main__': print(get_des_psswd('123456', 'RUY2OTdCRUFFRTg0OUQ0Q0E0ODNDRDMxN0YzOEEzREQudG9tY2F0OTQ='))
2020年03月28日
1,049 阅读
0 评论
0 点赞
2020-03-27
【爬虫】python爬取MSDN站所有P2P下载链接
今日,msdn的新网站开放注册,然后体验了一波,发现要强制观看30S的广告才可以下载,因此就想提前把资源爬取下来以便后用。先来看下成果:1,网站分析1.1通过直接爬取:https://msdn.itellyou.cn/,可以获得8个ID,对应着侧边栏的八个分类1.2没展开一个分类,会发送一个POST请求传递的就是之前获取的8个ID之一1.3查看这个请求的返回值,可以看到又获得一个ID,以及对应的资源名称。1.4点击,展开一个资源可以发现,又多了两个POST请求1.4.1第一个GETLang,经分析大概意思就是,获取资源的语言,然后这个请求也发送了一个ID,然后在返回值中又获得一个ID,这就是后文中的lang值1.4.2第二个GetList,这个传递了三个参数:(1)ID:经对比可发现这个ID就是我们之前一直在用的ID。(2)lang,我后来才发现是language的缩写,就是语言的意思,我们从第一个GetLang的返回值可以获取,这个lang值。(3)filter,翻译成中文就是过滤器的意思,对应图片坐下角的红色框框内是否勾选。1.4.3到这里就以及在返回值中获得了下载地址了:综上就是分析过程。然后就开始敲代码了2,为了追求速度,选择了Scrapy框架。然后代码自己看吧。爬虫.py:# -*- coding: utf-8 -*- import json import scrapy from msdn.items import MsdnItem class MsdndownSpider(scrapy.Spider): name = 'msdndown' allowed_domains = ['msdn.itellyou.cn'] start_urls = ['http://msdn.itellyou.cn/'] def parse(self, response): self.index = [i for i in response.xpath('//h4[@class="panel-title"]/a/@data-menuid').extract()] # self.index_title = [i for i in response.xpath('//h4[@class="panel-title"]/a/text()').extract()] url = 'https://msdn.itellyou.cn/Category/Index' for i in self.index: yield scrapy.FormRequest(url=url, formdata={'id': i}, dont_filter=True, callback=self.Get_Lang, meta={'id': i}) def Get_Lang(self, response): id_info = json.loads(response.text) url = 'https://msdn.itellyou.cn/Category/GetLang' for i in id_info: # 遍历软件列表 lang = i['id'] # 软件ID title = i['name'] # 软件名 # 进行下一次爬取,根据lang(语言)id获取软件语言ID列表 yield scrapy.FormRequest(url=url, formdata={'id': lang}, dont_filter=True, callback=self.Get_List, meta={'id': lang, 'title': title}) def Get_List(self, response): lang = json.loads(response.text)['result'] id = response.meta['id'] title = response.meta['title'] url = 'https://msdn.itellyou.cn/Category/GetList' # 如果语言为空则跳过,否则进行下次爬取下载地址 if len(lang) != 0: # 遍历语言列表ID for i in lang: data = { 'id': id, 'lang': i['id'], 'filter': 'true' } yield scrapy.FormRequest(url=url, formdata=data, dont_filter=True, callback=self.Get_Down, meta={'name': title, 'lang': i['lang']}) else: pass def Get_Down(self, response): response_json = json.loads(response.text)['result'] item = MsdnItem() for i in response_json: item['name'] = i['name'] item['url'] = i['url'] print(i['name'] + "--------------" + i['url']) # 测试输出,为了运行时不太无聊 return itemitems.py:# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://docs.scrapy.org/en/latest/topics/items.html import scrapy class MsdnItem(scrapy.Item): # define the fields for your item here like: name = scrapy.Field() url = scrapy.Field()settings.py:# -*- coding: utf-8 -*- # Scrapy settings for msdn project # # For simplicity, this file contains only settings considered important or # commonly used. You can find more settings consulting the documentation: # # https://docs.scrapy.org/en/latest/topics/settings.html # https://docs.scrapy.org/en/latest/topics/downloader-middleware.html # https://docs.scrapy.org/en/latest/topics/spider-middleware.html BOT_NAME = 'msdn' SPIDER_MODULES = ['msdn.spiders'] NEWSPIDER_MODULE = 'msdn.spiders' # Crawl responsibly by identifying yourself (and your website) on the user-agent # USER_AGENT = 'msdn (+http://www.yourdomain.com)' # Obey robots.txt rules ROBOTSTXT_OBEY = False # Configure maximum concurrent requests performed by Scrapy (default: 16) # CONCURRENT_REQUESTS = 32 # Configure a delay for requests for the same website (default: 0) # See https://docs.scrapy.org/en/latest/topics/settings.html#download-delay # See also autothrottle settings and docs DOWNLOAD_DELAY = 0.1 # The download delay setting will honor only one of: # CONCURRENT_REQUESTS_PER_DOMAIN = 16 # CONCURRENT_REQUESTS_PER_IP = 16 # Disable cookies (enabled by default) # COOKIES_ENABLED = False # Disable Telnet Console (enabled by default) # TELNETCONSOLE_ENABLED = False # Override the default request headers: DEFAULT_REQUEST_HEADERS = { 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'Accept-Language': 'en', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36' } # Enable or disable spider middlewares # See https://docs.scrapy.org/en/latest/topics/spider-middleware.html # SPIDER_MIDDLEWARES = { # 'msdn.middlewares.MsdnSpiderMiddleware': 543, # } # Enable or disable downloader middlewares # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html # DOWNLOADER_MIDDLEWARES = { # 'msdn.middlewares.MsdnDownloaderMiddleware': 543, # } # Enable or disable extensions # See https://docs.scrapy.org/en/latest/topics/extensions.html # EXTENSIONS = { # 'scrapy.extensions.telnet.TelnetConsole': None, # } # Configure item pipelines # See https://docs.scrapy.org/en/latest/topics/item-pipeline.html ITEM_PIPELINES = { 'msdn.pipelines.MsdnPipeline': 300, } # Enable and configure the AutoThrottle extension (disabled by default) # See https://docs.scrapy.org/en/latest/topics/autothrottle.html # AUTOTHROTTLE_ENABLED = True # The initial download delay # AUTOTHROTTLE_START_DELAY = 5 # The maximum download delay to be set in case of high latencies # AUTOTHROTTLE_MAX_DELAY = 60 # The average number of requests Scrapy should be sending in parallel to # each remote server # AUTOTHROTTLE_TARGET_CONCURRENCY = 1.0 # Enable showing throttling stats for every response received: # AUTOTHROTTLE_DEBUG = False # Enable and configure HTTP caching (disabled by default) # See https://docs.scrapy.org/en/latest/topics/downloader-middleware.html#httpcache-middleware-settings # HTTPCACHE_ENABLED = True # HTTPCACHE_EXPIRATION_SECS = 0 # HTTPCACHE_DIR = 'httpcache' # HTTPCACHE_IGNORE_HTTP_CODES = [] # HTTPCACHE_STORAGE = 'scrapy.extensions.httpcache.FilesystemCacheStorage'pipelines.py:# -*- coding: utf-8 -*- # Define your item pipelines here # # Don't forget to add your pipeline to the ITEM_PIPELINES setting # See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html class MsdnPipeline(object): def __init__(self): self.file = open('msdnc.csv', 'a+', encoding='utf8') def process_item(self, item, spider): title = item['name'] url = item['url'] self.file.write(title + '*' + url + ' ') def down_item(self, item, spider): self.file.close()main.py(启动文件):from scrapy.cmdline import execute execute(['scrapy', 'crawl', 'msdndown'])3,成品打包地址点击进入:csdn密码:lan666|大小:60kb已经过安全软件检测无毒,请您放心下载。
2020年03月27日
1,701 阅读
2 评论
0 点赞
1
...
78
79
80
...
90