C++ 如何拥有一个C++;如果变量是有限整数,则为输入值的变量编程求解?

C++ 如何拥有一个C++;如果变量是有限整数,则为输入值的变量编程求解?,c++,C++,可能重复: 我是C++新手,只是玩游戏……p> #include <iostream> using namespace std; int limbs(int handdmg, int armdmg, int chestdmg, int headshot, int legdmg) { return handdmg + armdmg + chestdmg + legdmg + headshot; } main () { int totaldmg; int

可能重复:

我是C++新手,只是玩游戏……p>
#include <iostream>
using namespace std;

int limbs(int handdmg, int armdmg, int chestdmg, int headshot, int legdmg)
{
    return handdmg + armdmg + chestdmg + legdmg + headshot;

}
main ()
{

    int totaldmg; 
    int handdmg; 
    int armdmg; 
    int chestdmg; 
    int legdmg;
    int headshot;
    int Dmgdial;
    int x;

    // limiting the variables to a smaller range of integers       

    handdmg = 0 < x < 5;
    armdmg = 10 < x < 15;
    chestdmg = 25 < x < 50;
    legdmg = 30 < x < 40;
    headshot = 80 < x < 120;

    cout  << "Enter your total damage taken:" << endl;
    cin >> totaldmg;

    Dmgdial = totaldmg;

    // want the variables to = the input value in the best smallest way possible

    limbs(handdmg, armdmg, chestdmg, headshot, legdmg) = Dmgdial;

    // then print the variables answers to the screen

    cout << "damage given to the hand:   " << handdmg << endl;
    cout << "damage given to the arm:    " << armdmg << endl;
    cout << "damage given to the chest:  " << chestdmg << endl;
    cout << "damage given to the leg:    " << legdmg << endl;
    cout << "damage given to the head:   " << headshot << endl;



    cin.clear();
    cin.ignore(2505, '\n');
    cin.get();

    return 0;

}
#包括
使用名称空间std;
内景肢体(内景手拍、内景臂拍、内景胸拍、内景头像、内景腿拍)
{
回传手拍+臂拍+胸拍+腿拍+头像;
}
主要()
{
int totaldmg;
int handdmg;
int armdmg;
int-chestdmg;
int legdmg;
国际头像;
int Dmgdial;
int x;
//将变量限制在较小的整数范围内
handdmg=0
这是你的任务。“计算机”不知道任何有关损坏的信息,也不知道什么是头像。拿一张纸,写下你想如何从总损坏值计算损坏详细信息。例如:

struct DamageDetails
{
   int head, leg, arm;
   const int HEAD_MAX = 120;
   const int HEAD_MIN = 80;

   static DamageDetails FromTotalDamage(int totalDamage)
   {
        DamageDetails damage;
        int damageTakenSoFar = totalDamage;
        damage.head = totalDamage / 2;  // 50% damage is taken to head
        if (damage.head > HEAD_MAX)
            damage.head = HEAD_MAX;
        damageTakenSoFar -= damage.head;
        // ...

        return damage;
   }

};

您正在尝试求解一个包含5个未知量的方程,这是一个欠定问题。您需要一个包含5个未知量的5个方程的系统才能得到唯一的答案

此外,你还没有实际指定方程-现在看起来你只是假设了一个线性方程t=x+y+z+v+w。考虑到你的(奇怪的)限制变量的部分,这可能是不正确的

P>此外,C++不是求解方程的数学系统。你需要编写代码来自己解决,或者使用第三方库。< /P>
总的来说,我想说的是,就做你想做的事情所需的数学和编程专业知识而言,你是在做你想做的事情。在尝试这样的任务之前,你将从学习更多的理论中获益。

以下是使用回溯法解决问题的方法:

#include <stdio.h>

int v[100], n, int dmg;

void init(int k)
{
    v[k] = 0;
}

bool solutionReached( int k ) 
{
    if (k <= 5)
        return false;

    int sum = 0;
    for (int i = 1; i <= k; i++)
    {
        sum += v[i];
    }

    if(sum == dmg)
    {
        if( v[1] < 5 &&
            v[2] > 10 && v[2] < 15 &&
            v[3] > 25 && v[3] < 50 &&
            v[4] > 30 && v[4] < 40 &&
            v[5] > 80 && v[5] < 120)
            return true;
    }

    return false;
}

void printSolution( int k ) 
{
    for (int i = 1; i < k; i++)
    {
        printf("%i ", v[i]);
    }
    printf("\n");
}

bool hasSuccesor( int k ) 
{
    if(v[k] < 120 && k <= 5)
    {
        v[k]++;
        return true;
    }
    return false;
}

bool isValid( int k ) 
{
    /*
    if(v[1] > 5)
        return false;
    if(!(v[2] > 10 && v[2] < 15))
        return false;
    if(!(v[3] > 25 && v[3] < 50))
        return false;
    if(!(v[4] > 30 && v[4] < 40))
        return false;
    if (!(v[5] > 80 && v[5] < 120))
        return false;
    */

    return true;
}

void bkt(int k)
{
    if(solutionReached(k))
        printSolution(k);
    else
    {
        init(k);
        while(hasSuccesor(k))
            if(isValid(k))
                bkt(k + 1);
    }
}

int main(int argc, char* argv[])
{
    dmg = 200;
    n = 6;
    bkt(1);

    return 0;
}
#包括
int v[100],n,int dmg;
void init(int k)
{
v[k]=0;
}
布尔解到达(整数k)
{
如果(k25&v[3]<50&&
v[4]>30&&v[4]<40&&
v[5]>80&&v[5]<120)
返回true;
}
返回false;
}
无效打印解决方案(int k)
{
对于(int i=1;i10&&v[2]<15))
返回false;
如果(!(v[3]>25&&v[3]<50))
返回false;
如果(!(v[4]>30和&v[4]<40))
返回false;
如果(!(v[5]>80&&v[5]<120))
返回false;
*/
返回true;
}
无效bkt(int k)
{
如果(达到溶液(k))
打印液(k);
其他的
{
init(k);
while(hasSuccesor(k))
if(isValid(k))
bkt(k+1);
}
}
int main(int argc,char*argv[])
{
dmg=200;
n=6;
bkt(1);
返回0;
}

handdmg=0?听起来你是想做序言,不是吗C@Mat不可能,完全相同。同一个人问,你的问题不会改变C++的基本原理。您需要编写求解方程的代码(或者找到一个实现该功能的库)。C++不是数学或Matlab,也不是人们用这种类型的东西。我在另一个帖子上得到实际答案之前转发了。。。没人明白。所以我重新发布了我正在使用的代码,希望它能更容易理解。。别恨我,我现在明白了