UVA-537 Artificial Intelligence?

这篇博客详细介绍了如何解决UVA在线判题平台上的第537题。代码实现了一个程序,用于读取输入的电力系统参数(电压U、电流I、功率P),并根据给定的单位进行转换和计算,输出缺少的参数。博主在解题过程中遇到了错误,通过调试发现并修正了问题,最终成功通过所有测试用例。
摘要由CSDN通过智能技术生成

原题连接:

https://vjudge.net/problem/UVA-537

AC代码:

#include <bits/stdc++.h>
using namespace std;


int main()
{
    int n;
    cin >> n;
    getchar();
    for (int t = 1; t <= n; t++)
    {
        cout << "Problem #" << t << endl;
        char str[500];
        fgets(str, 500, stdin);
        double p = 0, u = 0, i = 0;
        int cnt = 0; //记录变量,两个就break
        for (int j = 0; str[j] != '\0'; j++)
        {
            if (cnt == 2)
                break;
            if (str[j] == 'U' && str[j + 1] == '=')
            {
                cnt++;
                char num[10];
                int z = 0;
                j = j + 2;
                while (str[j] != 'm' && str[j] != 'k' && str[j] != 'M' && str[j] != 'V')
                {
                    num[z++] = str[j++];
                }

                num[z] = '\0';
                u = atof(num);
                if (str[j] == 'm')
                    u *= 0.001;
                else if (str[j] == 'k')
                    u *= 1000.0;
                else if (str[j] == 'M')
                    u *= 1000000.0;

                continue;
            }
            if (str[j] == 'I' && str[j + 1] == '=')
            {
                cnt++;
                char num[10];
                int z = 0;
                j = j + 2;
                while (str[j] != 'm' && str[j] != 'k' && str[j] != 'M' && str[j] != 'A')
                {
                    num[z++] = str[j++];
                }
                num[z] = '\0';
                i = atof(num);
                if (str[j] == 'm')
                    i *= 0.001;
                else if (str[j] == 'k')
                    i *= 1000.0;
                else if (str[j] == 'M')
                    i *= 1000000.0;

                continue;
            }
            if (str[j] == 'P' && str[j + 1] == '=')
            {
                cnt++;
                char num[100];
                int z = 0;
                j = j + 2;
                while (str[j] != 'm' && str[j] != 'k' && str[j] != 'M' && str[j] != 'W')
                {
                    num[z++] = str[j++];
                }
                num[z] = '\0';
                p = atof(num);
                if (str[j] == 'm')
                    p *= 0.001;
                else if (str[j] == 'k')
                    p *= 1000.0;
                else if (str[j] == 'M')
                    p *= 1000000.0;

                continue;
            }
        }
        if (p == 0)
        {
            printf("P=%.2lfW\n\n", u * i);
        }
        else if (u == 0)
        {
            printf("U=%.2lfV\n\n", (p / i));
        }
        else if (i == 0)
        {
            printf("I=%.2lfA\n\n", (p / u));
        }
    }
    return 0;
}

这题一开始脑子抽了 前缀没管是在分子还是分母都给乘后面了,虽然样例过了但死活不对,后来改了改样例才发现问题在哪里 着实无情

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值