int函数

Java获取月份天数错误

让人想犯罪 __ 提交于 2020-03-03 10:21:44
之前编写获取日期函数如下: /** * 获取某年某月有多少天 * @return 该月的天数 */ public static int getDaysAboutMonth(int year,int month){ Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); return c.getActualMaximum(Calendar.DAY_OF_MONTH); } 实际过程中当天数不为第一天时候,则无法获取准确的当月天数,采取以下方式时可以: /** * 获取某年某月有多少天 * @return 该月的天数 */ public static int getDaysAboutMonth(int year,int month){ Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month - 1); c.set(Calendar.DATE, 1);//把日期设置为当月第一天 c.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天 return c.get(Calendar.DATE);

[LOJ6436][PKUSC2018]神仙的游戏

独自空忆成欢 提交于 2020-03-03 09:44:07
loj description 给你一个只有 01 和 ? 的字符串,问你是否存在一种把 ? 改成 01 的方案使串存在一个长度为 \(1-n\) 的 \(border\) 。 \(n\le5\times10^5\) sol 这种题都不会我还是太菜了。 有一档部分分是“ 01 的个数不超过 \(5000\) ”。这个其实对正解的提示是蛮大的。 有一个显然的结论:存在一个长度为 \(len\) 的 \(border\) 当且仅当对于 \(\forall i\in[1,len]\) 有 \(s[i]=s[n-len+i]\) 。(感谢热心网友找出这里的一个错误) 或者这样说,把所有位置在模 \(n-len\) 意义下分组,同一组里的 01 要全部相同。 那么,如果存在一组 0 和 1 他们的下标之差为 \(x\) ,那么所有 \(y|x\) 的 \(n-y\) 都不可能成为 \(border\) 。 这样 \(67\) 分就可以写一个 \(5000^2\) 枚举 01 对统计,然后每次扫一遍倍数 \(O(n\log n)\) 计算答案。 考虑正解。现在的复杂度瓶颈在于枚举 01 对。 搞两个生成函数 \(A(x)\) 和 \(B(x)\) , \(A(x)=\sum_{i=0}^{n-1}[s_i==0]x^i\) , \(B(x)=\sum_{i=0}^{n-1}[s_i==1]x

C语言程序设计100例之(32):组合问题

元气小坏坏 提交于 2020-03-03 09:39:13
例32 组合问题 题目描述 排列与组合是常用的数学方法,其中组合就是从n个元素中抽出r个元素(不分顺序且r≤n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 例如n=5,r=3,所有组合为:123,124,125,134,135,145,234,235,245,345。 输入格式 一行两个自然数n,r(1<n<21,1≤r≤n)。 输出格式 所有的组合,每一个组合占一行且其中的元素按由小到大的顺序排列,每个元素占三个字符的位置,所有的组合也按字典顺序。 输入样例 5 3 输出样例 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 (1)编程思路。 用递归来完成。 设函数void dfs(int pos,int num)表示为第pos(0≤pos≤r-1)个数取值,取值可以为num~n之一。显然,若r-pos>n-num+1,则后面剩下的数不够,直接剪枝;否则,在num~n中取一个数i(num≤i≤n)赋给a[pos],继续为下一个位置pos+1取数,即递归调用函数dfs(pos+1,i+1)。 (2)源程序。 #include <stdio.h> int a[21],n,r; void dfs(int pos,int num) { if (pos==r) // 已有r个数 { for

LeetCode 刷题-- 数学类

≯℡__Kan透↙ 提交于 2020-03-03 08:17:14
283. 移动零 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 示例: 输入: [0,1,0,3,12] 输出: [1,3,12,0,0] public void moveZeroes ( int [ ] nums ) { int j = 0 ; //第一遍遍历,把不为0的数字都赋值给j //第二遍遍历,把0放在后面 for ( int i = 0 ; i < nums . length ; i ++ ) { if ( nums [ i ] != 0 ) { nums [ j ] = nums [ i ] ; j ++ ; } } for ( int i = j ; i < nums . length ; i ++ ) { nums [ i ] = 0 ; } } } 485. 最大的连续1的个数 给定一个二进制数组, 计算其中最大连续1的个数。 示例 1: 输入: [1,1,0,1,1,1] 输出: 3 解释: 开头的两位和最后的三位都是连续1,所以最大连续1的个数是 3. 注意: 输入的数组只包含 0 和1。 输入数组的长度是正整数,且不超过 10,000。 class Solution { public int findMaxConsecutiveOnes ( int [ ] nums ) { int count = 0 ;

extern关键字

妖精的绣舞 提交于 2020-03-03 06:32:51
1、extern用于两个或多个文件 共享相同的全局变量或者函数 。对于所有的程序文件是可用的。 2、而且当使用extern时可以 找到已经定义的变量或函数的引用 。\ 第一个文件: int count ; int main(){ count=5; } 第二个文件: extern int count ; void func(){ cout <<"count is "<<count<<endl; } 结果是 count is 5; 来源: CSDN 作者: try_again_later 链接: https://blog.csdn.net/try_again_later/article/details/104620376

LEETCODE打卡02

走远了吗. 提交于 2020-03-03 03:51:18
Leetcode打卡Day2 数组删重 (python,c++) 题目: // nums是以“引用”方式传递的。也就是说,不对实参做任何拷贝 int len = removeDuplicates ( nums ) ; // 在函数里修改输入数组对于调用者是可见的。 // 根据你的函数返回的长度,它会打印出数组中该长度范围的所有元素。 for ( int i = 0 ; i < len ; i + + ) { print ( nums [ i ] ) ; } method 1: c++求解 1. class Solution { 2. public : 3. int removeDuplicates ( vector < int > & nums ) { 4. if ( nums . size ( ) < 2 ) 5. return nums . size ( ) ; int i , j = 0 ; 6. for ( i = 0 ; i < nums . size ( ) ; i ++ ) 7. { 8. if ( nums [ i ] != nums [ j ] ) ++ j ; 9. nums [ j ] = nums [ i ] ; 10. } 11. return j + 1 ; } } ; c++很简单很好写,运行效果也不错。 method 2:python class

存储空间的分布

守給你的承諾、 提交于 2020-03-03 01:49:23
存储空间的分布 程序的空间分布通常分为(地址从下到上): 代码段 初始化数据段 未初始化数据段 堆 栈 分布如下图所示:(图片来自:C语言内存空间分布详解) 这里写图片描述 堆地址是从下到上增长,栈地址从上到下增长。 一个例题:判断a,b,c,d的存储空间? int a=0; class someClass{ int b; static int c; }; int main(){ int d=0; someClass *p=new someClass(); return 0; } 1 2 3 4 5 6 7 8 9 10 解析: 变量a 全局变量 存放在全局变量区 变量b 类的成员变量 由类的定义决定 在main函数中类A动态分配 因此b在堆区,这里一定要注意,b的存储区域的变化 变量c 静态成员 静态存储区 变量d 局部变量 栈区 来源: CSDN 作者: 不爱穿底裤 链接: https://blog.csdn.net/weixin_43908861/article/details/104616597

递归实现指数型枚举

落花浮王杯 提交于 2020-03-03 01:22:07
从 1~n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。 输入格式 输入一个整数n。 输出格式 每行输出一种方案。 同一行内的数必须升序排列,相邻两个数用恰好1个空格隔开。 对于没有选任何数的方案,输出空行。 本题有自定义校验器(SPJ),各行(不同方案)之间的顺序任意。 数据范围 1≤n≤15 输入样例: 3 输出样例: 3 2 2 3 1 1 3 1 2 1 2 3 思路: 虽然暴力做法可以实现,但是位运算+深度优先搜索为本题的最优解 代码: # include <iostream> using namespace std ; int n ; void dfs ( int u , int state ) //递归函数 { if ( u == n ) //当遍历到末尾时结束 { for ( int i = 0 ; i < n ; i ++ ) if ( state >> i & 1 ) //判断:状态值为1 时执行输出; cout << i + 1 << ' ' ; cout << endl ; return ; } //该点遍历结束后转向下一点 ,根据该点状态是否记为1分为两类; dfs ( u + 1 , state ) ; dfs ( u + 1 , state + ( 1 << u ) ) ; } int main ( ) { cin >> n ; dfs

Week 1 训练篇

让人想犯罪 __ 提交于 2020-03-02 21:40:06
Week 1 总结 训练篇 : Round 1: 第一轮的题目都比较简单 1.工作安排 http://47.95.147.191/contest/5/problem/A 描述 Farmer John 有太多的工作要做!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从0时刻开始,有 个单位时间。在任一时刻,他都可以选择编号 1 ~ N 的 N 项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有 N 个工作,虽然还是有可能。 对于第 i 个工作,有一个截止时间 ,如果他可以完成这个工作,那么他可以获利 。 在给定的工作利润和截止时间下,FJ能够获得的利润最大为多少呢? 输入 第1行:一个整数N. 第2~N+1行:第 i +1行有两个用空格分开的整数: 和 . 输出 输出一行,里面有一个整数,表示最大获利值。 这个题目就是建立一个利润的最大生成树,然后从最后一天开始往前操作。因为每一天可以完成DDL是之后的工作而不能DDL是完成之前的。 #include<stdio.h>#include<algorithm>#include<queue>#include<iostream> using namespace std;struct VD{ long long d,p; bool

20180318 代码错题(3)

时光怂恿深爱的人放手 提交于 2020-03-02 21:14:24
在C语言中,以下代码执行之后,*p的值为() void func(int *p) { static int num = 4; p = &num; (*p)--; } int main() { int i = 5; int *p = &i; func(p); printf( "%d" , *p); return 0; } 3 4 5 以上都不是答案 C  错选 B 在函数里,指针p又重新定位成num的地址空间,所以在函数中的自减是修改num的值;而当在main函数中的p指针依然指向 i 的地址空间,在func中没有被修改,那么值不变; 如果函数去掉num,如下: void func(int *p) { (*p)--; } 此时,就是修改 main函数中 i 的值了。 详细分析: 如上图,当调用函数的时候,形参指针p会指向实参指针p 所指向的地址空间; 在题目的 func 函数中,形参指针p 指向了新的地址空间num,如下图: 那么此时修改形参p 所指向地址空间的值,是不会影响 实参指针p和i 的值。 尽管函数的形参是指针,但是注意,它仍然是“值传递”。 一方面,函数本身没有任何返回;另一方面,函数只是对p的值的处理,并非p的地址。 函数调用时,p作实参,函数中也给p重新赋值,函数确实使静态局部变量num的值减1,但是函数执行完,返回到主函数中,p中的仍然是i的地址。