C语言之计算等式

题目描述

编程在算式123 45 67 8 9=N的下划线部分填上加号(+)或减号(-),使该等式成立。要求程序运行时输出该等式。(保证数据存在满足的等式)

输入要求

输入一个整数N。

输出要求

输出满足条件的等式。若不存在满足的等式,则输出"impossible"(输出不包括引号)

输入样例

100

输出样例

123+45-67+8-9=100

代码实现

这是之前的代码,图省事直接穷举了……我就说这个浏览量怎么和其他的不一样……真的献丑……后面有改进的版本。

#include <stdio.h>


int main()

{




int n; 

  scanf("%d",&n);
if (n==123+45+67+8+9) printf("123+45+67+8+9=%d\n",n);
       else if (n==123+45+67+8-9) printf("123+45+67+8-9=%d\n",n);
                 else if (n==123+45+67-8+9) printf("123+45+67-8+9=%d\n",n);
                        else if (n==123+45+67-8-9) printf("123+45+67-8-9=%d\n",n);
                                else if (n==123+45-67+8+9) printf("123+45-67+8+9=%d\n",n);
                                        else if (n==123+45-67+8-9) printf("123+45-67+8-9=%d\n",n);
                                                else if (n==123+45-67-8+9) printf("123+45-67-8+9=%d\n",n);
                                                         else  if (n==123+45-67-8-9) printf("123+45-67-8-9=%d\n",n);
                                                                  else if (n==123-45+67+8+9) printf("123-45+67+8+9=%d\n",n);
                                                                        else if (n==123-45+67+8-9) printf("123-45+67+8-9=%d\n",n);
                                                                                else if (n==123-45+67-8+9) printf("123-45+67-8+9=%d\n",n);
                                                                                        else if (n==123-45-67+8+9) printf("123-45-67+8+9=%d\n",n);
                                                                                                 else  if (n==123-45-67+8-9) printf("123-45-67+8-9=%d\n",n);
                                                                                                           else if (n==123-45-67-8+9) printf("123-45-67-8+9=%d\n",n);
                                                                                                                   else  if (n==123-45+67-8-9) printf("123-45+67-8-9=%d\n",n);
                                                                                                                             else if (n==123-45-67-8-9) printf("123-45-67-8-9=%d\n",n); 
                                                                                                                                    else printf("impossible\n");






            
return 0;


}

改良版

#include <stdio.h>
#include <stdlib.h>

int main()

{
	int n;
	int s1,s2,s3,s4,i,j,k,t,sum,flag;
    char x1,x2,x3,x4; //输出字符
    sum=0;
    flag=0;
    s1=-1;s2=-1;s3=-1;s4=-1; //计算时-1,+1来代替加减符号
	scanf("%d",&n);
    for(i=0;i<=1;i++) //四个循环,总共16个等式
    {
        s1=-s1; //使用!的话会变成逻辑值吧,代码sum的结果会发生改变
        for(j=0;j<=1;j++)
        {
            s2=-s2;
            for(k=0;k<=1;k++)
            {
                s3=-s3;
                for(t=0;t<=1;t++)
                {
                    s4=-s4;
                    sum=123+s1*45+s2*67+s3*8+s4*9; //计算等式的值和输入值进行比较
                    if(sum==n)
                        {   if(s1==1) x1='+';else x1='-';
                            if(s2==1) x2='+';else x2='-';
                            if(s3==1) x3='+';else x3='-';
                            if(s4==1) x4='+';else x4='-';//把-1,+1转化为字符输出
                            printf("123%c45%c67%c8%c9=%d\n",x1,x2,x3,x4,n);
                            flag=1; //如果可以有多个等式可以满足条件时的保险
                        }

                }

            }

        }

    }
    if(!flag) printf("impossible\n"); //没有满足的等式输出不可能
    return 0;
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值