ccf刷真题的经验

1、最开始看题目,一定要注意一些特殊点,题目看清,输出或者赋值,最好要复制粘贴,自己打容易错。

2、注意输出格式,特别是保留多少位小数,不够位数要补0等等。

3、做完,一定测试一些特殊点。

知识点:

1、 memset(a,0,sizeof(a));对Int型数组全部初始化为0.其实定义静态的不用初始化,也是0.如果201301题

2、map的相关用法:《这个是201301题出现最多数字的题目答案,里面有Map的定义、赋值、访问等等用法。具体百度。

#include<iostream>
#include<map>
using namespace std;
int main(){
	int n,b;
	int max=0,maxi=-1;
	map<int,int>p;
	scanf("%d",&n);
	int i;
	for(i=0;i<n;i++){
		scanf("%d",&b);
		p[b]++;
	}
	// for(map<int,int>::iterator it=p.begin();it!=p.end();it++){
	 
	for(map<int,int>::iterator it=p.begin();it!=p.end();it++){
		if(it->second>max){
			max=it->second;
			maxi=it->first;
		}
	}
	printf("%d",maxi);
	return 0;
}

3、map默认的排序是从小到大的,这是一个非常好用的点。

4、大小写字母相差32。  大小写字母转化可以用tolower()函数。kmp算法见博客https://blog.csdn.net/paincupid/article/details/81159320

感觉思路之前交过,但是实现起来比较困难。

5、memset在c语言中在#include<stdlib.h>里面。

6、系统不支持bool类型,不支持在for循环里面定义Int值。

7、注意题目所给数据的大小,有时候加起来超过了Int,比如2014年的12越第三题

8、如果定义int的二维数组,数据超过1000,或者在dev c++里运行不出来。那么就放在int外,就能运行出来,不然提交运行出错。因为内存空间有限,见2015年03月第一题。

9.对于自己没有使用的东西,还是少用,免得出现编译错误。

结构体定义和申请案例如下:

struct st{
    int x;
    int y;
};

    struct st a[1001]={0,0};//这个可以初始化

10sort是c++里面的#include<algorithm>库里面,sort(a,a+1001,cmp)。其中cmp放回为false,就不调换,否则就交换。。

11、闰年多一天有366天,关于日期的题见《节日》这个博客。里面写的挺多注意点的

总结:对于一些看起来不是很是很难,但是有很多细节需要注意的,这种题目,要么想清楚再写,那么就别写,不然都是白写,如果201403月的,就是很难,哎。。。搞不清。其次就是题目一定要看清,测试数据一定好好利用。

好好把握前面两个题目,好好测试一番,不然真的白写了。

12、关于ccf里面的string 函数相关使用请看下面代码,也是20150903题。主要使用getline(cin,string)输入、find(“xx”,m)(xx表示要查找的字符串,m代表起始位置)。函数的使用以及substr(起始位置,需要复制的个数)函数的使用,这些函数的方法使用容易错,多使用就行。代码请看:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<map>
#include<string.h>
using namespace std;
int main(){
	map<string,string>s;//对应的名称对应的值 
	string str[101];// 
	int m,n;
	scanf("%d%d",&m,&n);
	int i,j;
	string name,name1;
	string re1,re2,re3;
	char c;
	int x1,x2;//用于从一段字符串里面截取字符串 的起始坐标和末尾坐标 
	getchar();
	for(i=0;i<m;i++){
		getline(cin,str[i]);//string类型的输入 
	}
	for(i=0;i<n;i++){
		cin>>name;
		//cin>>c;
		getline(cin,name1);
		//cin>>c;
		s[name]=name1.substr(2,name1.length()-3);
	//	cout<<' '<<name<<' '<<s[name]<<endl;
	}
	x1=0;
	x2=0;
	for(i=0;i<m;i++){
		x1=0;
		x2=0;
		while(1){
		x1=int(str[i].find("{{",x2));//查找到需要替换的名字 
		if(x1==-1)
		break;
		if(x2==0)
		re1=str[i].substr(x2,x1-x2);
		else 	re1=str[i].substr(x2+2,x1-x2-2);
	
		x2=int(str[i].find("}}",x2+2));
		if(x2==-1)
		break;
		re2=str[i].substr(x1+3,x2-1-x1-3);//前面是起始位置,后面是个数 
	//	cout<<x1<<' '<<x2<<' '<<endl;
		cout<<re1<<s[re2];//输出前面的以及被替换的值 
	}
	if(x2!=0)
	cout<<str[i].substr(x2+2,str[i].length()-x2-2)<<endl;//输出末尾的字符串 
	else cout<<str[i].substr(x2,str[i].length()-x2)<<endl;
	}
//	cout<<s[name];
	return 0;
} 

13、c++里面sort函数用法 sort(a,a+n);

14、2017年第一题,题目说将编号最小的分出去,不是重量最小的,麻烦你把题目看清楚啊,大哥,这么简单题都错了,那真的不行的,大哥!!!

15如果是模拟的话,一定要想清楚一些边界点,比如是否取等号等情况,比如:2017年0302题,我多加了一个等号就30了,没有加就100分。

16、2017年12月份的2也是模拟,自己也没有想清楚一些特殊情况,导致错误,并且题目没有看清楚,也搞错了很多。

发布了84 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sunandstarws/article/details/96909717