注册 登录
编程论坛 C++教室

请教高手这个数学计算程序该如何编写

liuyingmei 发布于 2010-05-23 16:42, 1079 次点击
四个自然数,通过四则运算得出的结果,再组合成一组小于或等于36的不重复的6个数序
要求输出所有的计算结果
四个自然数是任意的小于10的数字
15 回复
#2
ciweitou1632010-05-24 14:32
再组合成一组小于或等于36的不重复的6个数序
这是什么意思?
#3
lscalin2010-05-24 16:08
我也没看懂后面的是啥意思,前面的要用到的四则运算好像也蛮难的呀,但网上一堆
#4
liuyingmei2010-05-30 07:20
从1~9中任取4个数,通过加减乘除四则运算后得出的结果<=36不重复的数字,输出其全部符合条件的结果(每组结果输出6个数字, 可能不止一组结果),最好将符合条件的每个数字出现的频率也输出。
#5
bccn2502010-05-30 11:30
4个数加减乘除得出的结果???什么意思

1 2 3 4四个数然后 1+2+3+4=结果1,1-2-3-4=结果2,1*2*3*4=结果3,1/2/3/4=结果4,是这样吗??
还是什么?
#6
liuyingmei2010-05-31 08:59
四则运算就有64种: +++  ++- ++*  ++/   +-- +-* +-+ +-/  +*+ +*/ +*- +**  +/- +/+ +// +/*  --- --* --/ --+  -/- -/* -/+ -//  *** **- **+ **/ 。。。。。。。
 4个数: 1234 1235 1236 1237 1238 1239  1324 1325 1326 1327 1328 。。。。 5678  5689。。共有(9*8*7*6)/24种
#7
bccn2502010-05-31 20:03
是要考虑乘除优先算的,还是只要从左到右就行了
#8
liuyingmei2010-06-02 12:36
乘除优先。  现在的4个不重复的数可从键盘上输入(但其排列还是有24种),如输入1234,则排列有:1234 1243 1324 1342 1432 1423  2314 2341 。。。   四则运算还是64种运算后的结果<=36的输出,只要输入出7个数即可。 但不能有重复的  答案应该不止7个数,可设置取前面的7个数即可。
#9
liuyingmei2010-06-02 12:38
最后是输出结果:7个不重复的数字。  不是输入(我打错了)
#10
ciweitou1632010-06-02 13:21
现在就只是运算方法随机,而数是自己输入的?
提供个思路:(代码今天晚上我写写)
Char a[7];
a[1] a[3] a[5] 为运算符

一个函数可以识别各种运算符号,返回下标值。
先找优先级高的运算符。

if(a[1]=='*')
    a[0]=a[0]*a[2];    //这里注意字符与数字之间的转换
    a[2]='A';          //‘A’只是一个标记  如果一个符号的左操作数a[i]是 ‘A’ ,左操作数定向到a[i-2]

希望能帮到你...
#11
ciweitou1632010-06-02 13:24
运算符 可以使用enum类型 然后随机输出...
#12
liuyingmei2010-06-02 19:24
太谢谢啦! 四个数是自己手动输入的。
#13
ciweitou1632010-06-03 13:19
自己写了一个,不过这里的“/”不是除法运算 而是 取整 ,要除法的话,自己改改就行。
程序代码:
#include<iostream>
using namespace std;

void display(char a[]);
int Result(char a[]);

char Sign[4]={'+','-','*','/'};

int main(void)
{
    int i=4;
    int result;
    char a[4];
    char b[7];
    cout<<"请输入4小于10个正整数"<<endl;
    while(i--)   
        cin>>a[i];
    int n=7;
    while(n--)
    {
        for(int i=0;i<7;i+=2)            //生成随机多项式
        {
            b[i]=a[rand()%4];
            if(i<5)
                b[i+1]=Sign[rand()%4];
        }
        display( b);
        result=Result( b);
        cout<<"结果="<<result<<endl;
    }
    return 0;
}

void display(char a[])        //显示多项式
{
    cout<<a;
}

int Result(char a[])
{
    int b[7];
    int result;
    int count=7;
    while(count--)
    {
        if((int)a[count]>=48)                //只传递操作数 不传递 操作符
        {
            b[count]=(int)a[count]-48;
        }else
            b[count]=6562;                    //9^4=6561    在运算中不可能出现 所以设置为标志位
    }   
    for(int i=1;i<6;i+=2)                //求程序中的乘除法运算
    {
        if(a[i]=='*'||a[i]=='/')
        {
            if(a[i]=='*')
            {
                if(b[i-1]!=6562)                    
                {
                    b[i-1]=b[i-1]*b[i+1];
                    b[i+1]=6562;
                }else if(b[i-3]!=6562)
                {
                    b[i-3]=b[i-3]*b[i+1];
                    b[i+1]=6562;
                }else
                {
                    b[i-5]=b[i-5]*b[i+1];
                    b[i+1]=6562;
                }
            }
            if(a[i]=='/')
            {
                if(b[i-1]!=6562)
                {
                    b[i-1]=b[i-1]/b[i+1];
                    b[i+1]=6562;
                }else if(b[i-3]!=6562)
                {
                    b[i-3]=b[i-3]/b[i+1];
                    b[i+1]=6562;
                }else
                {
                    b[i-5]=b[i-5]/b[i+1];
                    b[i+1]=6562;
                }
            }
        }
    }
    for(int i=1;i<6;i+=2)                //求程序中的加减法运算
    {
        if(a[i]=='+'||a[i]=='-')
        {
            if(a[i]=='+')
            {
                if(b[i-1]!=6562)
                {
                    b[i-1]=b[i-1]+b[i+1];
                    b[i+1]=6562;
                }else if(b[i-3]!=6562)
                {
                    b[i-3]=b[i-3]+b[i+1];
                    b[i+1]=6562;
                }else
                {
                    b[i-5]=b[i-5]+b[i+1];
                    b[i+1]=6562;
                }
            }
            if(a[i]=='-')
            {
                if(b[i-1]!=6562)
                {
                    b[i-1]=b[i-1]-b[i+1];
                    b[i+1]=6562;
                }else if(b[i-3]!=6562)
                {
                    b[i-3]=b[i-3]-b[i+1];
                    b[i+1]=6562;
                }else
                {
                    b[i-5]=b[i-5]-b[i+1];
                    b[i+1]=6562;
                }
            }
        }
    }
    int n=7;
    while(n--)
    {
        if(b[n]!=6562)
        {
            result=b[n];
            break;
        }
    }
    return result;
}

附上程序结果截图:
只有本站会员才能查看附件,请 登录
#14
liuyingmei2010-06-03 16:27
回复 13楼 ciweitou163
太谢谢啦!!!!!  送你鲜花 !!!!及礼品先!
#15
xin3109232010-06-03 20:23
还是不明白
#16
liuyingmei2010-06-03 23:13
回复 13楼 ciweitou163
ciweitou大师,结果出来的7个数字是要不能重复1~36之间的整数。 恳求你再改改程序吧! 谢谢! 请饮先。
1