杭电acm keys


2001-----计算两坐标间的距离
#include<stdio.h>
#include<math.h>
int main()
{
  double x1,x2,y1,y2,l;
  while(scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)!=EOF)  / /注:此处的x1,y1,x2,y2顺序别写错,我就在此跳了坑
  {
    l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));
 printf("%.2lf\n",l);
 
  }
return 0;
}



2003------求绝对值
#include<stdio.h>
#include<math.h>
int main()
{
  double a,b;
  while(scanf("%lf",&a)!=EOF)
  {
    b=fabs(a);
 printf("%0.2f\n",b);
 
  }
return 0;
}
2004----------成绩转换
方法一:  我跳的坑:题目要求用t,而我之前一直用的 i,题目要看清 尴尬
#include<stdio.h>  
int main ()  
{  
    int t;  
    while (scanf("%d",&t)!=EOF)  
    {  
        if(90<=t&&t<=100)printf("%c\n",'A');  
        else if(80<=t&&t<=89)printf("%c\n",'B');  
        else if(70<=t&&t<=79)printf("%c\n",'C');  
        else if(60<=t&&t<=69)printf("%c\n",'D');  
        else if(0<=t&&t<=59)printf("%c\n",'E');  
        else printf("Score is error!\n");  
    }  
    return 0;  
}  
方法二:
#include<stdio.h>  
int main ()  
{  
    int t;  
    while (scanf("%d",&t)!=EOF)  
    {  
        if(90<=t&&t<=100)printf("%c\n",'A');  
        else if(80<=t&&t<=89)printf("%c\n",'B');  
        else if(70<=t&&t<=79)printf("%c\n",'C');  
        else if(60<=t&&t<=69)printf("%c\n",'D');  
        else if(0<=t&&t<=59)printf("%c\n",'E');  
        else printf("Score is error!\n");  
    }  
    return 0;  
}  
2005-----------第几天
#include <stdio.h>                 //这个方法有点蠢 在编译器上运行正确,但在网站上是wrong answer
   int Get_Day(int year,int month,int day)
  {
 int Day; 
   if((year%4==0&&year%100!=0)||(year%400==0) )
    {
    if(month==2)
    Day=29;
    if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
    Day=31;
    if(month==4||month==6||month==8||month==9||month==11)
    Day=30;
    if(month==0)
    Day=0;
    }
 else
    {
     if(month==0)
     Day=0;
     if(month==2)
     Day=28;
     if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
     Day=31;
     if(month==4||month==6||month==8||month==9||month==11)
     Day=30;
    }
    return Day;
 }
 int main()
 {
    int year,month,day,days,i;

   
 int day_data=0;
    while(scanf("%d/%d/%d",&year,&month,&day)!=EOF)
    {
        for(i=1;i<month;i++)
        {
        days=Get_Day(year,month-i,day);
        day_data+=days;
    }
       day_data=day_data+day;
    printf("%d\n",day_data);
    day_data=0;
    }
 return 0;
}
方法二
   #include<stdio.h>
int main()
{
 int year,month,day;
 int arry[13]={31,28,31,30,31,30,31,31,30,31,30,31};
 while(~scanf("%d/%d/%d",&year,&month,&day))
 {
  int num=0;
  int i;
  for(i=0;i<month-1;i++)
   num+=arry[i];
  if(year%400==0 || (year%4==0 && year%100!=0))
  {
   if(month>2)
    num+=day+1;
   else
    num+=day;
  }
  else
   num+=day;
  printf("%d\n",num);
 }
 return 0;
}

2006-----求奇数的乘积     (小总结:与2005一样,在最后都将要打印的值在printf后回归初始值。)

#include<stdio.h>
int main()
{
 int n,i,a,temp;
 int sub=1;
while(scanf("%d",&n)!=EOF)
{
 for(i=0;i<n;i++)
 {
  scanf("%d",&a);
 
  if(a%2!=0)
  {
   temp=a;
   sub*=temp;
  }
  
  }
 printf("%d\n",sub);
 sub=1;
}
 return 0;
}
2007--------平方与立方和  
错误答案:  //不知哪有问题,编译器通过,官网未通过

#include<stdio.h>

int main()

{

 int m,n,i;
 int x=0,y=0;
 while(scanf("%d %d",&m,&n)!=EOF)
 {
   for(i=m;i<=n;i++)
   {
     if(m%2==0)
      x+=m*m;
  else
   y+=m*m*m;
  m++;
    }
   printf("%d %d\n",x,y);
   x=0;
   y=0;
 }
 eturn 0;
}

正确答案如下:(与错误答案比较,自己欠考虑,少考虑了吗m>n的情况)

#include<stdio.h>
int main()
{
 int m,n,i;
 int x=0,y=0;
 while(scanf("%d %d",&m,&n)!=EOF)
 {
  if(m<=n)
  {
   for(i=m;i<=n;i++)
   {
     if(m%2==0)
      x+=m*m;
  else
   y+=m*m*m;
  m++;
   }
   }
  else if(m>n)
  {
   for(i=n;i<=m;i++)
   {
     if(n%2==0)
      x+=n*n;
  else
   y+=n*n*n;
  n++;
   }
   }
   printf("%d %d\n",x,y);
   x=0;
   y=0;
 }
 
return 0;
}



2008----------数值统计

#include<stdio.h>
int main()
{
 int n,i;
 int a=0,b=0,c=0;
 double num;
 while(scanf("%d",&n)!=EOF)
 {
   if(n==0)break;
   for(i=0;i<n;i++)
   {
    scanf(" %lf",&num);
    if(num<0)
     a+=1;
     if(num==0)
     b+=1;
    if(num>0)
     c+=1;
  
   }
   printf("%d %d %d\n",a,b,c);
    a=0;
   b=0;
   c=0;

 }
return 0;
}

2009---------数列求和

方法一(利用递归算法)

#include<stdio.h>
#include<math.h>
 int m,n,i;
 double arr(int a);
int main()
{
  double sum=0;       //此处sum=0若在while循环中定义,
                                   则printf语句后的sum=0可去掉。
while(scanf("%d%d",&m,&n)!=EOF)
  { 
    for(i=1;i<=n;i++)  
    sum+=arr(i);
 printf("%0.2lf\n",sum);
 sum=0;
  }
    return 0;
 }
double arr(int a)
{
  if(a==1)
   return m;
  else
   return sqrt(arr(a-1));
}



2011----多项式求和

#include<stdio.h>
int main()
{
 int a[110];
 double s;
 int i,n,j,f;
 scanf("%d",&n);
 for (i=1;i<=n;i++)
        scanf("%d",&a[i]);
 for (i=1;i<=n;i++)
 {
  f = 1;
  s = 0;
  for (j=1;j<=a[i];j++)
  {
   s=s+1.0/j*f;
   f=-f;
  }
  printf("%.2f\n",s);
 }
 return 0;
}

2013 ------蟠桃计

#include<stdio.h>
int main()
{
  int peach;
  int i,n;
  while(scanf("%d",&n)!=EOF)
  {
  peach=1;
    for(i=1;i<n;i++)
 { 
   peach=2*(peach+1);
 }
  printf("%d\n",peach); 
  }
return 0;
}
2014--------评委打分  //先输入第一个分数作为最值的标志,之后输入的分数判断值与最值得关系,累加所有分数的值,并找到最值将最值减去,最后求平均值。

#include<stdio.h>
int main()
{
  int n,i,score[110],max,min,sum;
  double average;
  while(scanf("%d",&n)!=EOF)
  {
      scanf("%d",&score[0]);
      sum=max=min=score[0];
      for(i=1;i<n;i++)
 {
  scanf("%d",&score[i]);
  sum+=score[i];
 if(min>score[i])
 {
  min=score[i];
     
 }
 else if(max<score[i])
 {
  max=score[i];
 
 }
   
 }
  sum=sum-max-min;
 average=(sum+0.0)/(n-2);     //此处(sum+0.0)使得除得结果有小鼠值保留
 printf("%0.2lf\n",average);
  }
  return 0;
}
2016--------数据交换

#include<stdio.h>
int main()
{
 int n,i,tmp,j;
 int a[100];
 while(scanf("%d",&n)!=EOF)
 {
  if(n==0)
  break;
 scanf("%d",&a[0]);
  j=0;                  //记录数据的位置
  for(i=1;i<n;i++)
  {
   scanf("%d",&a[i]);
        if(a[j]>a[i])
     j=i;   //位置交换
 }
     tmp=a[j];
  a[j]=a[0];             //数据交换
  a[0]=tmp;   
  for(i=0;i<n;i++)
  {
   if(i<n-1)
  printf("%d ",a[i]); 
   else
 printf("%d\n",a[i]);
  }
 }
  return 0;
 }

猜你喜欢

转载自blog.csdn.net/naturly/article/details/80153890