UVa 537 人工智能

/*

* 解题思路:

* 题意比较好理解,就是给出P = U*I 中的两个量求第三个量、 纯靠细心!

* 容易错的点、就每组数据还要再多输出一个空行、最后一组也要!( ps: 如果发现自己WA、多拿几组数据测下看哪里出错、情况就那么几种、试下就行了!)

*/

#include <stdio.h>
#include <string.h>
int main( )
{
    int t;
    int i,j;
    int total,flag,p,q;
    int len[ 5 ],r[ 5 ] ,y[ 5 ],vis[ 5 ];
    double sum[ 5 ],x[ 5 ];
    char c;
    char ss[ 10 ] = { 'P' , 'U' , 'I' , 'M' , 'm','k','A','V','W'};
    char sss[ 5 ][ 100 ];

    total = 1;
    scanf("%d",&t);
    getchar( );
    while( t-- )
    {
       flag = vis[ 0 ] = vis[ 1 ] = 1;
        p = q = r[ 0 ] = r[ 1 ] = 0;
        memset( sss , '\0' , sizeof( sss ) );
        while( ( c = getchar( ) ) !='\n' )
        {
            if( c == '=' )
                flag = 0;
            else if( !flag && (c == 'W' || c == 'V' || c =='A' ) )
            {
                sss[ q ][ p++ ] = c;
                flag = 1;
                len[ q++ ] = p;
                p = 0;
            }
            else if( !flag )
            {
                if( c == '.')
                {
                     vis[  q ] = 0;
                     r[ q ] = p;
                }
                sss[ q ][ p++ ] = c;
            }
        }
        i = 0;
        x[ 0 ] = x[ 1 ] = 1;
        memset( y,0,sizeof( y ) );
        while( i<2 )
        {
            if( sss[ i ][ len[ i ]-2 ]  == 'm' )
                x[ i ] = 0.001;
            else if( sss[ i ][ len[ i ] - 2 ] == 'M' )
                x[ i ] = 1000000;
            else if( sss[ i ][ len[ i ] - 2 ] =='k' )
                x[ i ] = 1000;
            if( sss[ i ][ len[ i ]-1 ] =='A' )
                y[ i ] = 6;
            else if( sss[ i ][ len[ i ]-1 ] =='V' )
                y[ i ] = 7;
            else if( sss[ i ][ len[ i ]-1 ] =='W' )
                y[ i ] = 8;
            i++;
        }
         p = 0;
         while( p<2 )
         {
             sum[ p ] = 0;
             j=10;
            if( vis[ p ] )
                for( i=0; ( sss[ p ][ i ]<='9' && sss[ p ][ i ] >='0' ) ;i++ )
                    sum[ p ] = sum[ p ]*j + (sss[ p ][ i ]-'0');
            else
            {
                for( i=0,j=10;i < r[ p ] ;i++ )
                    sum[ p ] = sum[ p ] * j +( sss[ p ][ i ] - '0' );
                for( i=r[p]+1; ( sss[ p ][ i ]<='9' && sss[ p ][ i ] >='0' );i++,j*=10 )
                    sum[ p ] = sum[ p ] + (sss[ p ][ i ]-'0')*1.0/j;
            }
            sum[ p ] = sum[ p ] * x[ p ];
            p++;
         }
        printf("Problem #%d\n",total++ );
        if(( y[ 0 ] == 6 && y[ 1 ] == 7 ) ||  (y[ 0 ] == 7 && y[ 1 ] == 6) )
            printf("P=%.2lfW\n", sum[ 0 ] *sum[ 1 ] );
        else if( y[ 0 ] == 6 && y[ 1 ] == 8 )
            printf("U=%.2lfV\n",sum[ 1 ]/sum[ 0 ] );
        else if( y[ 0 ] == 7 && y[ 1 ] == 8)
            printf("I=%.2lfA\n",sum[ 1 ]/sum[ 0 ] );
        else if( y[ 0 ] == 8 && y[ 1 ] ==6 )
            printf("U=%.2lfV\n",sum[ 0 ]/sum[ 1 ] );
        else if( y[ 0 ] == 8 && y[ 1 ] == 7 )
            printf("I=%.2lfA\n",sum[ 0 ]/sum[ 1 ] );

        puts("");
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值