UVA-537 - Artificial Intelligence?

这道题目做了至少有两个小时,郁闷~

 

寻找题目中的两个“=”,记录每一个“=”前面的标志(P,I,U),后面的数字。

 

运用数组存P,U,I的值,shu['P']存P的值,shu['I']存I的值,shu['U']存U的值,一开始全部变为0,一条字符串判断完成后,哪个为0,哪个就输出。

 

可惜一开始以为'k'是小写的,我一开始以为是大写的,WA了一次。

 

#include<stdio.h>
#include<string.h>
double sum(char *str)
{
    double s=0;
    int leap,i,n;
    n=strlen(str);
    leap=1;
    for(i=0;i<n;i++)
    {
        if(str[i]>='0'&&str[i]<='9')
        {
            s=s*10+str[i]-'0';
        }
        else
        {
            for(i=i+1;i<n;i++)
            {
                s=s*10+str[i]-'0';
                leap=leap*10;
            }
        }
    }
    return s/leap;
}
void pan(char *str)
{
    double shu[100];
    char s[100];
    int i,n,leap,j;
	int con;
    n=strlen(str);
    memset(shu,0,sizeof(shu));
    for(i=0;i<n;i++)
    {
        if(str[i]=='=')
        {
            con=str[i-1];
            for(j=i+1;j<n;j++)
            {
                if(str[j]!='.'&&(str[j]<'0'||str[j]>'9'))
                {
                    s[j-i-1]='\0';
                    break;
                }
                s[j-i-1]=str[j];
            }
			i=j;
            shu[con]=1.0*sum(s);
            if(str[i]=='m')
                shu[con]*=0.001;
            if(str[i]=='k')
                shu[con]*=1000;
            if(str[i]=='M')
                shu[con]*=1000000;
        }
    }
    if(shu['P']==0)
    printf("P=%.2lfW\n",1.0*shu['U']*shu['I']);
    if(shu['U']==0)
    printf("U=%.2lfV\n",1.0*shu['P']/shu['I']);
    if(shu['I']==0)
    printf("I=%.2lfA\n",1.0*shu['P']/shu['U']);
}
int main()
{

    int n,i;
    char str[1000];
    scanf("%d%*c",&n);
    for(i=0;i<n;i++)
    {
        gets(str);
		printf("Problem #%d\n",i+1);
        pan(str);
		printf("\n");
    }
    return 0;
}


 

 

你可能感兴趣的:(c,ini)