初学C
文章平均质量分 51
joeycom2
这个作者很懒,什么都没留下…
展开
-
两个集合的差
题目出自杭电http://acm.hdu.edu.cn/showproblem.php?pid=2034 集合的差:以属于A而不属于B的元素为元素的集合称为A与B的差集,即找出A中有的,而B中没的 (不理解?没关系。用通俗的话说,就是A集合中的元素减去AB的交集后的元素集合) 思路:对输入的A,B集合进行集合内排序, 上代码#include#includein原创 2016-04-03 19:00:56 · 4459 阅读 · 0 评论 -
巧用数组
例题引入: 把手放在键盘上,稍不留意就会往右错移一位。这样输入的Q就会变成输入W;输入的J就会变成输入K等。问题:输入一个错位后的字符串(大写),输出打字员本来想打的句子。假定前提:输入保证合法(例如:输入中不会出现A) 样例输入: O S, GOMR YPFSU/ 样例输出: I AM FINE TODAY. 分析: 1.输入字符串(包括输入空格)可以用getchar 2.输入输转载 2016-05-11 15:34:49 · 267 阅读 · 0 评论 -
HDU2055
题目来自杭电 AC代码:#include <stdio.h>#include <string.h>#include <cctype>int change(char c){ if(isupper(c)) return c-'A'+1;//当参数c为大写英文字母(A-Z)时,返回非零值 if(islower(c)) return 'a'-c-1;//当参数c为小写英文字母(原创 2016-04-30 22:32:08 · 304 阅读 · 0 评论 -
HDU2056
题目出自杭电 题目大意: 给出两矩形的对角线上的两点(没说是主对角线还是副对角线)求两矩形的相交面积。 注意: 1.注意给的对角线不一定是主对角线,所以要转换成主对角线上的点,。2.还需要判断形成的两个矩形是否有相交的部分,如果没有直接输出0.00,判断条件是:第四个点的横坐标、纵坐标都大于第一个点的;且第三个点的横、纵坐标都小于第二个点的。3.计算相交部分的面积,取第二个、第四个点中较原创 2016-05-01 16:09:45 · 1129 阅读 · 0 评论 -
UVa455--Periodic Strings
题目:算一个串的最小周期 思路:枚举,判断所得字符串是否为周期字符串。#include <stdio.h>#include <string.h>int i,j;int isTthePeriod(char s[],int T) //判断是否为周期字符串{ for(i=0;i<T;i++) { for(j=i+T;j<strlen(s);j+=T)原创 2016-05-12 19:56:24 · 232 阅读 · 0 评论 -
HDU2047
题目出自杭电 思路:从最后一个向前递推 当第n个是O时,那么第n-1个不能为O,此种情况有f(n-2) * 2个 当第n个为非O时,有f(n-1) * 2个; 综上得递推公式:f(n)=f(n-2) * 2+f(n-1) * 2#include <stdio.h>int main(){ __int64 a[45]; int n,i; a[1]=3;a[2]=8原创 2016-04-22 17:01:30 · 717 阅读 · 0 评论 -
输入输出
1. 每次测试都要手动输入许多数,这时可以把输入的数据保存在文件中,输出的数据也保存在文件中,只要事先把输入的数据保存在文件中·,就不必每次重新输入; 数据输出在文件中也避免了“输出太多,一卷屏就看不见了“的尴尬,运行结束后,慢慢浏览输出文件即可。如果有标准答案文件,可以进行文件比较(–>在Windows中可以使用fc命令,在Linux中可以使用diff命令) 事实上,几乎所有算法竞赛的输入原创 2016-05-08 20:55:23 · 447 阅读 · 0 评论 -
HDU2048错排问题
题目出自杭电 思路:共有n个人,往前递推,可分为n-1个人拿错票和n-2个人拿错票的情况 当有n-1个拿错票时,再加入一个人,只要第n个人和前面任意的n-1个人其中一个调换票就可以了,所以有f(n-1) * (n-1)。 当有n-2个拿错票时,只能是没拿错的那个人与第n个交换票,而那个人可能是前面n-1个的任意一个,所以又有f(n-2) * (n-1) 所以错排结果为(n-1) * (原创 2016-04-24 15:06:11 · 296 阅读 · 0 评论 -
南阳20~深搜
算法原创 2016-05-21 20:30:03 · 511 阅读 · 0 评论 -
hdu1495~广搜
思路: 其实就是要判断可乐能不能被平分……..有六种状态,从a瓶到b瓶,a–>cb–>a b–>cc–>a c–>b然后每种状态里面又分两种不同情况,可以将此瓶的水全部清空,不能清空……然后广搜就可以了……..原创 2016-05-25 21:32:11 · 368 阅读 · 0 评论 -
HDU2051进制转换
#include <stdio.h>int main(){ int a,n,i,cnt=0; int num[30]; while(~scanf("%d",&a)) { int i=0; do{ num[i]=a%2; a=a/2; i++; }原创 2016-04-25 21:33:25 · 694 阅读 · 0 评论 -
HDU2045~递推
题目出自杭电 思路: ps:看Source知道这是一道递推题,就想着要找规律了-,- 根据数学中的排列组合: 前n-2个已涂好后,涂第n-1个即有2种情况: 1. n-1的色与n-2和1的色都不相同,那么n就是剩下的那个色,米选择。 即就是f(n-1) 2. n-1的色与n-2不相同但与1个色一样,那么n的色就有2个色选择. 即就是f(n-2)*2综上得:f(n) = f原创 2016-04-15 17:46:31 · 414 阅读 · 0 评论 -
HDU2054
题目出自杭电 原来想着用c++的重载函数做: 发现有很大的问题: 1. 高精度的数就过不了,如:3.1111111111111111111111111111111111111111111111 2. 定义输入的数的类型不好定义。 因此需要改思路: 将输入的数定义为字符串型,用字符串的比较函数strcmp一一比较,在此之前,需要将输入的字符串进行修改#include <stdio.h>#原创 2016-04-28 19:54:06 · 349 阅读 · 0 评论 -
人见人爱A^B
题目出自杭电 代码不长,但如果真要自己想的话要想好久, 法一:循环分部取余 1.这种方法适用于 a^n%m 类型 2.适用于n比较小的情况,n太大的话,循环结构会受不鸟。。。#include<stdio.h>#include<stdlib.h>int main(){ int n, m, cont; while (~scanf("%d%d", &n, &m) && (原创 2016-04-05 21:35:59 · 355 阅读 · 0 评论 -
求多边形面积
题目出自杭电 容易水得:#include <stdio.h>#include<stdlib.h>typedef struct point{ int x,y;}point;point a[100];double area(point p,point q){ return p.x * q.y - q.x * p.y;}int main(){原创 2016-04-05 22:07:44 · 401 阅读 · 0 评论 -
HDU2037(贪心-。-)
题目出自杭电 水题思路: 1.对输入数据时间进行排序。 2.若下一个节目的开始时间>=上一个节目的结束时间,则计数变量cnt++;水题代码:#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int n;struct show{ int s,e;}pro[110];bool原创 2016-04-06 16:48:39 · 558 阅读 · 0 评论 -
HDU2040-亲和数
题目出自杭电 首先解释何谓亲和数 亲和数是对于两个数来说的。如果两个数a和b,a的所有除本身以外的因数之和等于b,b的所有除本身以外的因数之和等于a,则称a,b是一对亲和数。 思路:对于输入的数A,算出它的所有真约数的和C,若C=B,则A和B是亲和数。反之不是。 上代码#include <stdio.h>int n,m;int sum(int n){ int sum =1,原创 2016-04-07 21:09:15 · 977 阅读 · 0 评论 -
HDU2049错排问题
题目出自杭电 思路:因此先找到N个新郎中M个错一共有几种,是Cm(n)=N!/M!/(N-M)! 再乘以错排公式f[n]=(n-1)*(f[n-1]+f[n-2])#include <stdio.h>int main(){ int n,m,i,a; __int64 f[25],c[25]; f[0]=1,f[1]=1,f[2]=2; for(i=3;i<2原创 2016-04-25 17:44:54 · 320 阅读 · 0 评论 -
HDU2050分割问题
题目出自杭电 相关的问题资料可以在以下链接中找到: http://blog.csdn.net/wu_lai_314/article/details/8219236(1)先讲n条直线最多分平面问题 题目大致如:n条直线,最多可以把平面分为多少个区域。 析:当有n-1条直线时,平面最多被分成了f(n-1)个区域。则第n条直线要是切成的区域数最多,就必须与每条直线相交且不能有同一交点。原创 2016-04-25 19:58:48 · 415 阅读 · 0 评论 -
HDU2041
题目出自杭电 分析:走上第n级,可以从第n-1级走一步上来,也可以从第n-2级走两步上来。所以问题就转换为:走到n-1级的总走法+走到n-2级的总走法,依次递推。 要用上斐波那契递推 斐波那契数列:每个数都等于它的前两个数字和(前2个除外);即:F(n)=F(n-1)+F(n-2);#include <stdio.h>int main(){ int n,m,i,a[41];原创 2016-04-08 13:37:14 · 768 阅读 · 0 评论 -
HDU2042
题目出自杭电 #include #include int f(int m){ if(m==1) return 4; else return (f(m-1)-1)*2;}int main(){ int n,m; scanf("%d",&n); while(n--) { scanf("原创 2016-04-09 16:04:53 · 531 阅读 · 0 评论 -
HDU2043
题目出自杭电 #include <stdio.h>#include <string.h>int main(){ int m,i,l; char mima[50]; int f1,f2,f3,f4,f5; while(~scanf("%d",&m)) { getchar(); while(m--) {原创 2016-04-10 21:49:07 · 490 阅读 · 0 评论 -
HDU2053
题目出自杭电 题目大意: 先把这些灯标上号,1 2 3 4 5 6 7 8 ……无穷 首先全是关的,也就是全是0 第一次操作 ,标号是1的倍数,全都变成相反的状态,也就是全变成1.. 第二次操作 ,标号是2的倍数,全都变成相反的状态,你可以看下,2 4 6……变成了0.. 第三次操作 ,标号是3的倍数,全都变成相反的状态,你可以看下,3 6 9…… 问:N 号台灯最后 变成了 什么状态原创 2016-04-27 21:32:22 · 563 阅读 · 0 评论 -
HDU2044
题目出自杭电 思路: 1.由于蜂房是一排的,所以,蜜蜂要么往正右方走,要么往右下方走;不难看出,这是一个斐波那契递推; 2.从a到b可简化为从1到b-a,从而使得数组尽可能小; 3.注意不能用int,因为数据比较大,直接用int会产生溢出所以改用__int64。 *第一次Time Limit Exceeded*#include <stdio.h>__int64 n;int leve原创 2016-04-11 17:28:04 · 1206 阅读 · 0 评论 -
常用排序模板
快速排序 其思想是:先选一个“标尺”, 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于它。 这样,排序问题就被分割为两个子区间。 再分别对子区间排序就可以了。选择排序 思想:重复选择数组内的最大值,交换到合适的位置。该排序方法比较慢。堆排序 思想:堆实际上是一棵完全二叉树,利用大顶堆(小顶堆)堆顶记录的是最大关键字(最小关键字)这一特性,使得每次从原创 2017-03-06 22:16:15 · 478 阅读 · 0 评论