acm基础

#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)) ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值