Dream To Me

总有些什么留下来并被惦记

ACM练习两道


  ACM的。。。杭电那边的,就当是练语法了,很弱的题。。但做做也暴露出不少问题。。。


P2026

首字母变大写

Problem Description

输入一个英文句子,将每个单词的第一个字母改成大写字母。


Input

输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。


Output

请输出按照要求改写后的英文句子。


Sample Input

i like acm

i want to get an accepted


Sample Output

I Like Acm

I Want To Get An Accepted


AC Code:

#include <iostream>
using namespace std;
int main()
{
  char b;
  int pd=1;
  while(cin.get(b))
     {  
     if(b>='a'&&b<='z'&&pd) 
       {
       b=toupper(b);
       pd=0;
       }
     else if(b>='0'&&b<='9')
       pd=0;
     else if(b==' '||b=='\n')
       pd++;
     cout<<b;       
     }
  return 0;
}



P2005

第几天?

Problem Description

给定一个日期,输出这个日期是该年的第几天。


Input

输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。


Output

对于每组输入数据,输出一行,表示该日期是该年的第几天。


Sample Input

1985/1/20

2006/3/12


Sample Output

20

71


AC Code:

#include <iostream>
using namespace std;
int yz(int year)
{
  if(((year%4==0&&(year%100))||(year%400==0)))
    return 1;
  else
    return 0;
}
      
int main()
{
  int year,month,day;
  int ron[12]={31,29,31,30,31,30,31,31,30,31,30,31};
  int fon[12]={31,28,31,30,31,30,31,31,30,31,30,31};
  int nmon=1,total=0;
  while(scanf("%d/%d/%d",&year,&month,&day)!=EOF)
    {
     total+=day;
     while(month)
      {
       month--;
       if(month>=nmon)
        {
         if(yz(year))
          total+=ron[month-1];
         else
          total+=fon[month-1];    
        }       
      }
     cout<<total<<endl;;
     total=0;
    }
  return 0;
}


  代码写的真的都很废柴,尤其第二题那个判断闰年条件,加括号和不加括号的效果搞的我很不爽。本来第一题想大部分用函数解决的,但手头一时都没找到,就先算了,一开始代码就几行的事情,结果那ACM独有的Presentation Error让我只能把大部分代码改写以图输出格式的正确,败了。。。USACO不也这样嘛……

  好好学物理。。。