#include iostream
#include string
using namespace std;
后来发现,不管编写什么题目,一般直接写上面的头文件绝对没有问题,再依据具体情况添加一些头文件就行。
acm题目中常常会有限定,比如最大输入100个数等,而由此可以设置一个100大的数组,这绝对在acm的容忍范围之内。在数组的定义时常常选择宏定义:
#define MAX 100
int sum[MAX];
acm中可能有三种输入情况:
1).已知有n个输入:
cin>>n;
for(int i=0;i<n;i++){...}
2).输入以特殊的符号结束:
while(cin>>n && n!=0){...}
3).输入以EOF结束:
while(cin>>a>>b){...}
将输入的字符流与定义的字符数组联系起来:
char buf[255]; ---------->cin.getline(buf,255);
string buf; ---------->getline(cin,buf);
一般第一种用的比较多,因为对于char的数组,头文件string.h可以提供一些重要又实用方法如下:
1).strcmp(s1,s2)比较两个字符串是否相等,若是,返回0 //如:if(strcmp(s,"0")==0)...
ps:这个方法还有另外一个妙用,就是可以比较两个时间的字符串的大小以确定哪个时间比较晚.
2).strlen(s):获得某一个字符串的长度(也即包含字符的数组实际长度)
gets()的应用:在acm中gets()函数常常用到,因为对于某一个输入字符串s,可以由gets(s)获得,并且gets遇回车才停止读入输入,可以用在连续输入字符串的应用中。
比如:输入是一连串超长的大数,以0结束输入,输出将是输入串的做和运算。
char s[100];
int sum[100]; //这两个数组都是全局变量
while(gets(s),strcmp(s,"0"))
{
int temp=0;
for(int i=strlen(s)-1,j=strlen(s);i>-1;i--)
{
sum[j-1-i] += (s[i]-'0');
}
}
acm中用 函数+struct 比用含方法的类要多,因为struct结构简单,便于使用,编写也很简单,格式如下:
typedef struct
{
char come[9];
char leave[9];
char hao[16];
}record;
//以下是包含在main函数中的
while(N--)
{
cin>>n;
record * jilu=new record[n];
for(int i=0; i<n; i++)
cin>>jilu[i].hao>>jilu[i].come>>jilu[i].leave;
cout<<jilu[findFirst(jilu , n)].hao<<" "<< jilu[findLast(jilu , n)].hao<<endl;
delete []jilu;
}
再附加一些acm中可能要用到的简洁算法:
#include<iomanip>
using namespace std;
cout<<fixed<<setprecision(2)<<getValue(a,b)<<endl;
可以将getValue函数返回的整数值转为精度为2(小数点后2为)的浮点数,也可改为1,2,4 ,8位,对应使用是setprecision(1),setprecision(2),setprecision(4),setprecision(8),其余保持不变。
数组的申请:
char * p=new char[10];
char * p = (char *)malloc(sizeof(char)*p_length)
数组的初始化(假设以下的p是一个整型数组):
memset(p,0,sizeof(p)) ;