c语言 填写运算符

本文介绍了一种使用C语言实现的枚举方法,通过循环和条件判断填充运算符,以找出使给定数字组合等于特定结果的所有可能的数学表达式。

c语言 填写运算符

用枚举方法实现
算法和原理很简单,就是循环和判断有些多,容易搞错

#include <stdio.h>

int main() {
    int j,i[5];//循环变量,数组i来表示4个运算符
    int sign,result,count=0,num[6];//累加运算符号 保存运算式的结果 计数器 保存操作数
    float left,right;
    char oper[5] = {' ','+','-','*','/'};
    printf("输入五个数,之间用空格隔开");
    for (j = 1; j <= 5 ; j++)
        scanf("%d",&num[j]);
    printf("输入结果:");
    scanf("%d",&result);
    for (i[1] = 1; i[1]<=4 ;i[1]++)//循环4种运算符,1234分别为+-*/
    {
        if ((i[1]<4)||(num[2]!=0))//如果运算符为/的话,保证后面一个运算数不为0
        {
            for (i[2] = 1; i[2]<=4 ;i[2]++)
            {
                if ((i[2]<4)||(num[3]!=0))
                {
                    for (i[3] = 1; i[3]<=4 ;i[3]++)
                    {
                        if ((i[3]<4)||(num[4]!=0))
                        {
                            for (i[4] = 1; i[4]<=4 ;i[4]++)
                            {
                                if ((i[4]<4)||(num[5]!=0))
                                {
                                    left = 0;
                                    right=num[1];
                                    sign=1;
                                    for ( j = 1; j <=4; j++)
                                    {
                                        switch(oper[i[j]])//使用case语句把运算符填到对应的位置
                                        {
                                            case '+':
                                                left = left + sign*right;
                                                sign = 1;
                                                right = num[j+1];
                                                break;
                                            case '-':
                                                left = left + sign*right;
                                                sign = -1;
                                                right = num[j+1];
                                                break;
                                            case '*':
                                                right = right*num[j+1];
                                                break;
                                            case '/':
                                                right = right/num[j+1];
                                                break;
                                        }
                                    }
                                    if (left+sign*right==result)//判断如果运算式的结果和输入的结果相同,则表示找到一种算法,并输出
                                    {
                                        count++;
                                        printf("%3d:",count);
                                        for ( j = 1; j <=4 ; j++)
                                            printf("%d%c",num[j],oper[i[j]]);
                                        printf("%d=%d\n",num[5],result);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }

    }
    if (count == 0)
        printf("没有符合要求的方法!\n");
    getch();
    return 0;
}
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值