建立一支足球队

时间:2013-12-04 12:35:35

标签: c++

你好我的问题有问题我的代码适用于所有号码,但我不知道什么时候发送它我得到错误的答案这里是问题的链接任何帮助可能是很好的http://sharecode.ir/section/problemset/problem/2499

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;
int main()
{
    while(1)
    {
        int pos[3];
        for(int i=0 ; i<3 ; i++)
        {
            cin>>pos[i];
        }
        if(pos[0] == 0 && pos[1] == 0 && pos[2] == 0)
            return 0;
        if(pos[0]<=26)
        {
            if(pos[1]<60)
            {
                cout<<"No positions"<<endl;
                continue;
            }
            if(pos[1]>=60 && pos[1]<70)
            {
                if(pos[2]<200)
                {
                    cout<<"No positions"<<endl;
                    continue;
                }
                else
                {
                    cout<<"Forward"<<endl;
                    continue;
                }
            }
            if(pos[1]>=70 && pos[1]<80)
            {
                if(pos[2]<200)
                {
                    cout<<"No positions"<<endl;
                    continue;
                }
                if(pos[2]>=200 && pos[2]<500)
                {
                    cout<<"Forward"<<endl;
                    continue;
                }
                if(pos[2]>=500)
                {
                    cout<<"Mid-field Forward"<<endl;
                    continue;
                }
            }
            if(pos[1]>=80)
            {
                if(pos[2]<200)
                {
                    cout<<"No positions"<<endl;
                    continue;
                }
                if(pos[2]>=200 && pos[2]<300)
                {
                    cout<<"Forward"<<endl;
                    continue;
                }
                if(pos[2]>=300 && pos[2]<500)
                {
                    cout<<"Forward Defense"<<endl;
                }
                if(pos[2]>=500)
                {
                    cout<<"Mid-field Forward Defense"<<endl;
                    continue;
                }
            }
        }
        if(pos[0]>26 && pos[0]<=30)
        {
            if(pos[1]<80 && pos[1]>=70)
            {
                if(pos[2]>=500)
                {
                    cout<<"Mid-field"<<endl;
                    continue;
                }
                else
                {
                    cout<<"No positions"<<endl;
                    continue;
                }
            }
            if(pos[1]>=80)
            {
                if(pos[2]<300)
                {
                    cout<<"No positions"<<endl;
                    continue;
                }
                if(pos[2]>=300 && pos[2]<500)
                {
                    cout<<"Defense"<<endl;
                    continue;
                }
                if(pos[2]>=500)
                {
                    cout<<"Mid-field Defense"<<endl;
                    continue;
                }
            }
        }
        if(pos[0]>30 && pos[0]<=36)
        {
            if(pos[1]>=80 && pos[2]>=300)
            {
                    cout<<"Defense"<<endl;
                    continue;
            }
            else
            {
                cout<<"No positions"<<endl;
                continue;
            }
        }
        if(pos[0]>36)
        {
            cout<<"No positions"<<endl;
            continue;
        }
    }
}

2 个答案:

答案 0 :(得分:1)

在此if声明if(pos[0]>26 && pos[0]<=30)中,您必须在pos[1] < 70打印“无位置”时添加条件。您的程序失败的示例测试是30 64 377

现在,即使您(几乎)以这种方式解决了问题,但我必须说您的代码编写得很糟糕。我的意思是你有太多的条件,角落案例悬挂和一些变量名称差。您可以通过john's answer查看(更多)更好的方法来实现此功能。但是,他的解决方案目前并不完美,所以这里是他的代码,删除了所有错误:

int correct(int age, int weight, int strength) {
    if (age == 0 && weight == 0 && strength == 0)
        return 0;
    bool no_positions = true;
    if (age <= 30 && weight >= 70 && strength >= 500)
    {
        cout << "Mid-field";
        no_positions = false;
    }

    if (age <= 26 && weight >= 60 && strength >= 200)
    {
        if (!no_positions) cout << " ";
        cout << "Forward";
        no_positions = false;
    }

    if (age <= 36 && weight >= 80 && strength >= 300)
    {
        if (!no_positions) cout << " ";
        cout << "Defense";
        no_positions = false;
    }

    if (no_positions)
        cout << "No positions";
    cout << endl;
}

请仔细研究此解决方案,了解您所缺少的所有良好做法。

答案 1 :(得分:-2)

你的逻辑错了(太复杂了)。这是一种简单的方法。

while (1)
{
    cin >> age >> weight >> strength;
    if (age == 0 && weight == 0 && strength == 0)
        return 0;
    bool no_positions = true;
    if (age <= 30 && weight >= 70 && strength >= 500)
    {
       cout << "Mid-field ";
       no_positions = false;
    }
    if (age <= 26 && weight >= 60 && strength >= 200)
    {
       cout << "Forward ";
       no_positions = false;
    }
    if (age <= 36 && weight >= 80 && strength >= 300)
    {
       cout << "Defense ";
       no_positions = false;
    }
    if (no_positions)
       cout << "No positions";
    cout << endl;
}

当您编写代码时,尝试结构代码尽可能接近问题的描述。您使用所有不同的ifcontinue语句进行了太多努力。