http://acm.sdibt.edu.cn:8080/judge/contest/view.action?cid=397#problem/D
这题思路很简单,只要注意单位的处理就好了。判断是哪种情况的是根据“P=”  “U=”  “I=”区分的。每一次输出结束都要再输出一个空行,我开始做了n次
总是wrong,哪里找不出原因,最后把别人的代码运行发现自己的输出少了一个空行。
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
int main()
{
    char c[6][10000]={0},s[10000]={0},t[3]={0};
    char U[]="U=",I[]="I=",P[]="P=";
    double u[6]={0};
    int i,j,k,l,n,m,x,flag1,flag2,flag3,len[6]={0},e;
    scanf("%d",&n);
    getchar();
    for(i=1;i<=n;i++)
    {
        memset(u,0, sizeof(u));
        memset(len,0, sizeof(len));
        memset(c,0, sizeof(c));
        memset(s,0, sizeof(s));
        gets(s);
        printf("Problem #%d\n",i);
        k=strlen(s);
        flag1=flag2=flag3=0;
  for(j=0;j<k-1;j+=1)
        {
            t[0]=s[j];t[1]=s[j+1];
            if(strcmp(t,U)==0)
    flag1=1;
            if(strcmp(t,I)==0)
    flag2=1;
            if(strcmp(t,P)==0)
    flag3=1;
        }
        if(flag1==1)
   for(j=0;;j+=1)
   {
    t[0]=s[j];t[1]=s[j+1];
    if(strcmp(t,U)==0)
    {
     for(m=j+2,x=0;s[m]!='V';x++,m++)
      c[1][x]=s[m];
     c[1][x]='\0';

     if(s[m-1]>='0'&&s[m-1]<='9')
      u[1]=atof(c[1]);
     if(s[m-1]=='M')
     {
      c[1][x-1]='\0';
      u[1]=1000000*atof(c[1]);

     }
     if(s[m-1]=='m')
     {
      c[1][x-1]='\0';
      u[1]=atof(c[1])/1000;
     }
     if(s[m-1]=='k')
     {
      c[1][x-1]='\0';
      u[1]=atof(c[1])*1000;
     }

     break;
    }
   }
   if(flag2==1)
    for(j=0;;j+=1)
    {
     t[0]=s[j];t[1]=s[j+1];
     if(strcmp(t,I)==0)
     {
      for(m=j+2,x=0;s[m]!='A';x++,m++)
       c[2][x]=s[m];
      c[2][x]='\0';
      if(s[m-1]>='0'&&s[m-1]<='9')
       u[2]=atof(c[2]);
      if(s[m-1]=='M')
      {
       c[2][x-1]='\0';
       u[2]=1000000*atof(c[2]);
      }
      if(s[m-1]=='m')
      {
       c[2][x-1]='\0';
       u[2]=atof(c[2])/1000;
      }
      if(s[m-1]=='k')
      {
       c[2][x-1]='\0';
       u[2]=atof(c[2])*1000;
      }

      break;

     }
    }
    if(flag3==1)
     for(j=0;;j+=1)
     {
      t[0]=s[j];t[1]=s[j+1];
      if(strcmp(t,P)==0)
      {
       for(m=j+2,x=0;s[m]!='W';x++,m++)
        c[3][x]=s[m];
       c[3][x]='\0';

       if(s[m-1]>='0'&&s[m-1]<='9')
        u[3]=atof(c[3]);
       if(s[m-1]=='M')
       {
        c[3][x-1]='\0';
        u[3]=1000000*atof(c[3]);
       }
       if(s[m-1]=='m')
       {
        c[3][x-1]='\0';
        u[3]=atof(c[3])/1000;
       }
       if(s[m-1]=='k')
       {
        c[3][x-1]='\0';
        u[3]=atof(c[3])*1000;
       }
       break;
      }
     }
     if(flag1&&flag2)
      printf("P=%.2fW\n",u[1]*u[2]);
     if(flag1&&flag3)
      printf("I=%.2fA\n",u[3]/u[1]);
     if(flag2&&flag3)
      printf("U=%.2fV\n",u[3]/u[2]);
                    printf("\n");
    }
    return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation