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不也这样嘛……
好好学物理。。。
