杭电ACM暑假集训心得一

For each case, output SUM(n) in one line, followed by a blank line.
每一个结果后面都有一个空行
you must note that there is a blank line between outputs.
是每一个结果之间有空行,,最后一个无空行。。

 

 

 

题目难点
题目要求“输入数据有多组”,用while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) 来实现一直输入(实现方法有很多,截取了网上常用的一种)
当测试第一组数据的时候,很容易成功;
但当测试第二组第三组数据的时候就发现问题了;
原因是程序把你用来确认输入的“回车键”当作下一组输入的第一个字符
解决方法1:专门留一个空字符给回车键,(见第8行输入scanf("%c%c%c % * c",&a,&b,&c));其中 “ * ” 表示该输入项读入后不赋予任何变量,即跳过该输入值。参考问题解答1
解决方法2:用getchar()吞掉回车键。getchar()是一种函数,功能是从stdio流中读字符。参考问题解答2

 


求实数的绝对值   绝对值函数用fabs

 

1985/1/20   scanf("%d/%d/%d",...); 既可以  闰年29 %400==0||(%4==0&&%100!=0)    平年28。。。
注意最后一步加天数的时候,,,应该是在if外的。因为啥年都加。。

 

对于每组输入数据,输出一行,应包括两个整数x和y,分别表示该段连续的整数中所有偶数的平方和以及所有奇数的立方和。
你可以认为32位整数足以保存结果。
注意此题,,需要先排序。。把x和y排好序。。在找。。

 

题目难点
题目要求“输入数据有多组”,用while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) 来实现一直输入(实现方法有很多,截取了网上常用的一种)
当测试第一组数据的时候,很容易成功;
但当测试第二组第三组数据的时候就发现问题了;
原因是程序把你用来确认输入的“回车键”当作下一组输入的第一个字符
解决方法1:专门留一个空字符给回车键,(见第8行输入scanf("%c%c%c % * c",&a,&b,&c));其中 “ * ” 表示该输入项读入后不赋予任何变量,即跳过该输入值。参考问题解答1
解决方法2:用getchar()吞掉回车键。getchar()是一种函数,功能是从stdio流中读字符。参考问题解答2

 

方法一
#include

 

int main()
{
    char a, b, c, t;
    while( scanf("%c%c%c",&a,&b,&c)!=EOF )
    {
        getchar();
        if( a>b ) { t=a; a=b; b=t; }//如果a的ASCII码大于b,就交换a,b

 

        if( a>c ) { t=a; a=c; c=t; }

 

        if( b>c ) { t=b; b=c; c=t; }

 

        printf("%c %c %c\n",a,b,c);
    }
        return 0;
}

 

方法二
#include

 

int main()
{
    char a, b, c, t;
    while( scanf("%c%c%c%*c",&a,&b,&c)!=EOF )
    {
  if( a>b ) { t=a; a=b; b=t; }//如果a的ASCII码大于b,就交换a,b

 

        if( a>c ) { t=a; a=c; c=t; }

 

        if( b>c ) { t=b; b=c; c=t; }

 

        printf("%c %c %c\n",a,b,c);
    }
    return 0;
}

 

这一题没有什么难度,首先要清楚如何判定三条边是否能够组成三角形,要满足三个条件:
1. 三条边都要大于0的实数
2. 任意两边的和大于第三边
3. 任意两边的差小于第三边
由于条件2,条件3是等价的,所以不必同时判断,在本题中已经默认了每条边的范围了,在这里可以判断条件1也可以不做判断。还有一个容易错误的地方:在定义三条边a,b,c的时候注意定义的是float类型,而不是int类型。要不提交的会是wrong answer。我的代码如下:
#include

 

int main(void)
{
int n;
float a,b,c;
scanf("%d",&n);
for(int i=0; i {
scanf("%f%f%f",&a,&b,&c);
if((a+b>c)&&(a+c>b)&&(c+b>a))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}


 
水仙花数
#include
int main(){
 int m,n;
 int i;
 int a,b,c;
 int flag;
 while(scanf("%d %d",&m,&n)!=EOF){
 flag=0;
 for(i=m;i<=n;i++){
  a=i/100;
  b=i%100/10;
  c=i%10;
  if(a*a*a+b*b*b+c*c*c==i){
   if(flag==1)
    printf(" ");
    printf("%d",i);
    flag=1;
  }
 }
 if(flag==0){
  printf("no"); 
 } 
 printf("\n");
 }
 return 0;
}

你可能感兴趣的:(杭电ACM暑假集训心得一)