枚举:填运算符问题

 

a b c d e=f:填入运算符,使等式成立。

 1 #include<stdio.h>
 2 int main()
 3 {   //定义部分
 4     int num[6];//保存操作数
 5     int result;//用来保存结果值
 6     int j,i[5];//用来保存四个运算符
 7     int count=0;//用来保存符合条件的结果个数
 8     float left,right;//保存中间结果,必须要定义成浮点型,若是定义成整型,在计算结果的时候会将浮点数自动转换成整数,会使符合条件的结果数增加
 9     int sign;//累加运算时的符号
10     char oper[5]={' ','+','-','*','/'};//定义运算符
11 
12     //输入部分
13     printf("输入五个数:");
14     for(j=1;j<=5;j++)
15         scanf("%d",&num[j]);
16     printf("请输入结果值:");
17         scanf("%d",&result);
18 
19     //产生和填入四种运算符
20     for(i[1]=1;i[1]<=4;i[1]++)//i[1]=1,则表示第一个运算符是加号i[1]=1,则表示第一个运算符是减号....i1表示加,i2表示减,i3表示乘,i4表示除。
21     {
22         if(i[1]<=4&&num[2]!=0)//若第一个运算符若不是"/"号,或第二个操作数right不能为0,则执行循环语句
23         {
24             for(i[2]=1;i[2]<=4;i[2]++)
25             {
26                if(i[2]<=4&&num[3]!=0)//若第二个运算符若不是"/"号,或第三个操作数right不能为0,则执行循环语句
27                {
28                   for(i[3]=1;i[3]<=4;i[3]++)
29                   {
30                       if(i[3]<=4&&num[4]!=0)//若第三个运算符若不是"/"号,或第四个操作数right不能为0,则执行循环语句
31                       {
32                         for(i[4]=1;i[4]<=4;i[4]++)
33                         {
34                             if(i[4]<=4&&num[5]!=0)//若第四个运算符若不是"/"号,或第五个操作数right不能为0,则执行循环语句
35                             {
36                                     left=0;
37                                     right=num[1];
38                                     sign=1;//符号位
39                                     for(j=1;j<=4;j++)
40                                     {
41                                         switch(oper[i[j]])
42                                         {
43                                             case '+':
44                                                 left=left+sign*right;
45                                                 sign=1;
46                                                 right=num[j+1];
47                                                 break;
48                                             case '-':
49                                                 left=left+sign*right;
50                                                 sign=-1;
51                                                 right=num[j+1];
52                                                 break;//通过sign等于-1实现减法
53                                             case '*':
54                                                 right=right*num[j+1];
55                                                 break;
56                                             case '/':
57                                                 right=right/num[j+1];
58                                                 break;
59                                         }
60                                     }//将四个运算符分别放入等式中
61                                         if(left+sign*right==result)
62                                         {
63                                             count++;
64                                             printf("%3d: ",count);
65                                             for(j=1;j<=4;j++)
66                                                 printf("%d%c",num[j],oper[i[j]]);
67                                             printf("%d=%d\n",num[5],result);
68                                         }
69                                 }
70                             }
71                         }
72                     }
73                }
74             }
75         }
76      }
77     if(count==0)
78         printf("没有符合条件的答案!");
79     return 0;
80 }

 

转载于:https://www.cnblogs.com/nvliumang/p/5286159.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值