zoukankan      html  css  js  c++  java
  • codevs 2884 字符等式

    2884 字符等式

    题目描述 Description

    现在,我们有一个用卡片组成的等式(卡片仅仅是数字和=号)
    虽然是等式 但是它却是错误的.....

    后来你觉得,
    似乎在这个等式左侧的某个地方添上一个加号“+”
    就可以使等式成立...

    但是,,等到你要将之付诸行动的时候,
    你却不懂得怎么做..

    所以你决定求助于万能的计算机...

    输入描述 Input Description

    一行,一个等式
    保证每个数字不会超过 maxlongint OR int

    输出描述 Output Description

    一行,
    如果可以成功使等式成立,
    就输出成立的等式,(如果存在多个等式成立就输出加号‘+’最靠左的一个)
          如 输入221=23,则输出2+21=23,而不输出22+1=23

    否则输出"Impossible!"(不含引号)

    样例输入 Sample Input
    样例1
    11=2
    样例2
    222=222
    样例输出 Sample Output
    样例1
    1+1=2
    样例2
    Impossible!
    数据范围及提示 Data Size & Hint

    不要想得太复杂,蠢蠢的字符串操作。

    注意请原始输出:如99=018输出9+9=018;像卡片一样哦,喵~

    思路

    先处理出等号右边的数,然后枚举加号的位置。

    代码

    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    char s[1001];
    int a,b,c,l,n;
    queue<char>d;
    int main()
    {
        int i,j,k;
        scanf("%s",s);
        l=strlen(s);
        i=0;
        while(s[i]!='=')
          i++;
        n=i;
        i++;
        while(i<l)
          c=c*10+s[i]-'0',i++;
        for(i=0;i<n-1;i++)
        {
            b=0;
            a=a*10+s[i]-'0';
            for(j=i+1;j<n;j++)
              b=b*10+s[j]-'0';
            if(a+b==c)
            {
                for(k=0;k<l;k++)
                  if(k==i)
                    printf("%c+",s[k]);
                  else
                    if(k==n)
                      printf("=");
                    else
                      printf("%c",s[k]);
                return 0;
            }
        }
        printf("Impossible!");
        return 0;
    }
  • 相关阅读:
    搭建DG(data guard),及搭建过程中遇到的一些小问题 高伟
    介绍linux下vi命令的使用
    linux gcc编译器使用
    Linux进程编程介绍
    事件与接口实例讲解 C#
    Linux 2.6内核的编译步骤及模块的动态加载
    C# 各种定时器比较 zz
    linux下增加系统调用
    VirtualBox共享文件夹
    C++程序的单元测试(转贴)
  • 原文地址:https://www.cnblogs.com/jyhywh/p/5974779.html
Copyright © 2011-2022 走看看