2017.12.17

2017.12.03

贪心,分治综合习题(1)

1. 2的幂次方表示

思路:本题很容易就想到用递归做。对于2的一次和二次,可以直接打表输出,而且题中所给的数据不大,N<20000,可以预处理把21到215储存在一个数组里,以后好比较。然后就贪心调用函数,把k每次从大到小比较,用s记数,输出括号,进行下一次递归。需要注意的是,在递归中,2的零次幂和2的一次幂是要单独特殊判断的。

核心代码:

if(k==0){
	printf("0");
	return;
}
else if(k==1)
	return;
while(k){
	for(int i=15;i>=0;i--){
		if(k>=mi2[i]){
			k-=mi2[i];
			s++;
			mo[s]=i;
		}
	}
}
for(int i=1;i<=s;i++){
	if(i!=s){
		if(mo[i]!=1){
			printf("2(");
			mi(mo[i]);
			printf(")+");
		}
		else printf("2+");
	}
	else{
		if(mo[i]!=1){
			printf("2(");
			mi(mo[i]);
			printf(")");
		}
		else printf("2");
	}
}

状态:AC

2. 逆波兰表达式

思路:把整个的前缀表达式分成三个部分:{1.符号 2.这个算式的前半部分 3.这个算式的后半部分}。求出前半部分和后半部分的值,再根据符号做运算。因为前半部分和后半部分不一定只有一个值,可能也是一个算式,所以要使用递归。同时,再在switch中特判一下如果仅仅是一个值的情况。

核心代码:?

char num[500];
scanf("%s",num);
switch(num[0]){
	case‘+‘:
		return bolan()+bolan();
	case‘-‘:
		return bolan()-bolan();
	case‘*‘:
		return bolan()*bolan();
	case‘/‘:
		return bolan()/bolan();
	default:
		return atof(num);
}

状态:AC

3. 求最大公约数问题

思路:求最大公约数可以使用辗转相除法:假设a > b > 0,那么a和b的最大公约数等于b和a%b的最大公约数,然后把b和a%b作为新一轮的输入。由于这个过程会一直递减,直到a%b等于0的时候,b的值就是所要求的最大公约数。

核心代码:

if(a<b){t=a;a=b;b=t;}
	if(a==b)
	printf("%d",a);
	else if(a%b==0)
	printf("%d",b);

//以上为需要注意的一些事项(代码)

int GCD(int i1,int i2){
	if(i1%i2==0)
		return i2;
	else{
		i1=i1%i2;
		if(i1<i2){
			int t;
			t=i1;i1=i2;i2=t;
		}
		return GCD(i1,i2);
	}
}

状态:AC

时间: 2024-11-05 07:53:38

2017.12.17的相关文章

2017.12.17~2017.12.24

最近这两个星期的做题计划 (打'.'的是可做可不做,打'!'的是必做,打'?'的是选做) Openjudge  2.2 8758 .2的幂次方表示                          AC1696 !逆波兰表达式                            AC7592 !求最大公约数问题                     AC1750 !全排列666   !放苹果(递归) Openjudge  1.11 1       !查找最接近的元素4       .网线主管

2017.9.17校内noip模拟赛解题报告

预计分数:100+60+60=220 实际分数:100+60+40=200 除了暴力什么都不会的我..... T1 2017.9.17巧克力棒(chocolate) 巧克力棒(chocolate)Time Limit:1000ms Memory Limit:64MB题目描述LYK 找到了一根巧克力棒,但是这根巧克力棒太长了,LYK 无法一口吞进去.具体地,这根巧克力棒长为 n,它想将这根巧克力棒折成 n 段长为 1 的巧克力棒,然后慢慢享用.它打算每次将一根长为 k 的巧克力棒折成两段长为 a

2017.2.17学习C#的第一天,我眼中的C#是什么样的?

今天是学习C#的第一天,感谢凯哥带我走上了学习C#的正路(昨天资料发下来自己看了下,云里雾里,没咋看懂). 一 什么是C#(第一天学习) 首先感谢凯哥让我了解了C#的起源,发展.从最初的C到C++再到现在的C++++(也就是C#),它与JAVA的恩恩怨怨,微软和JAVA的恩恩怨怨(具体是啥我也没怎么记住,还是凯哥说的对,度娘上有详细的解释,我就不复制粘贴了).但是有一点我记得很清楚,C#中的#就是sharp的意思,sharp是锋利,敏捷的意思,因此在我眼中,C#就是锋利,敏捷的编程语言!让我更效

2017.12.02【NOIP提高组】模拟赛A组

2017.12.02[NOIP提高组]模拟赛A组 T1 3555[GDKOI2014模拟]树的直径 T2 3542[清华集训2014]冒泡排序 T3 3486[NOIP2013模拟联考10]道路改建(rebuild) T1 树直径的一个性质,两棵树合并,形成新的树的直径的两个端点为原树中的四个端点之二. 可以用反证法证明.用此性质本题就变成了lca裸题了 Code #include<cstdio> #include<cstring> #include<cmath> #i

2017.12.20 2周3次课

2017.12.20 二周第三次课 2.14 文件和目录权限chmod 命令chmod( change mode的简写 )用于改变用户对文件/目录的读写执行权限 其格式为:chmod [-R] xyz文件名(这里的xyz表示数字).其中,·-R选项的作用等同于chown命令的一R选项,也表示级联更改. 属性的含义: [r]:读 : [w]:写: [x]:执行: [-]:不可以: 值得注意的是,在Linux系统中,一个目录的默认权限为755,而一个文件的默认权限为644. 为了方便更改文件的权限,

12.17 Nginx负载均衡;12.18 ssl原理;12.19 生产ssl密钥对;12.20 Nginx配置ssl

扩展: 针对请求的uri来代理 http://ask.apelearn.com/question/1049 根据访问的目录来区分后端web http://ask.apelearn.com/question/920 12.17 Nginx负载均衡 1. 安装dig命令: [[email protected] ~]# yum install -y bind-utils 2. 用dig获取qq.com的ip地址: [[email protected] ~]# dig qq.com 3. 创建ld.co

centos 6.5 升级内核 linux 3.12.17

环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G) 系统版本:Linux centos 2.6.32-431.el6.x86_64(Centos-6.5-x86_64-minimal.iso ) 升级内核版本:longterm:3.12.17 升级步骤: 1.虚拟系统安装 要求mininal方式安装(205个包),具体步骤省略. 2.查看原有系统内核版本,升级更新包 2.1更新包 [[email protected] ~]# yum update [[email pr

java一周学习记录(2017/12/2)

姓名:Danny                               日期:2017/12/2 任务 日期 听课 编程程序 阅读课本 准备考试 考试 周六加课 日统计 周日 周一 30 120 150 周二 50 140 190 周三 150 150 150 周四 180 180 周五 100 180 280 周六 480 480

2017.12.09【NOIP提高组】模拟赛A组

2017.12.09[NOIP提高组]模拟赛A组 T1 3489. [NOIP2013模拟联考11]数列的GCD(gcd) T2 3500.[NOIP2013模拟联考15]物语(monogatari) T3 3501.[NOIP2013模拟联考15]消息传递(news) 吐槽:这次的题好像有点水啊,但最简单的第二题都给打挂啦!!(数组开小了) T1 本套题中最难的题.考虑dp 设f[i]是b[1],b[2]...b[N]的最大公约数的数目,g[i]是b[1],b[2]...b[N]的公约数的数目