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;
}
时间: 2024-11-02 23:20:22

codevs 2884 字符等式的相关文章

1485 字符配对

codevs——1485 字符配对 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题解 题目描述 Description 在一个字符串中,把相同的字符两两删除,求剩下字符的个数. 例如:字符串asasda, 首先删除两个'a',得到字符串'ssda'. 然后删除两个's',得到字符串'da'. 此时,字符串中没有了相同的字符,删除结束,剩下个数为2. 输入描述 Input Description 一个字符串,含义如描述所示. 输出描述 Output Des

算法系列(1):Google方程式

有一个字符组成的等式:WWWDOT – GOOGLE = DOTCOM,每个字符代表一个0-9之间的数字,WWWDOT.GOOGLE和DOTCOM都是合法的数字,不能以0开头.请找出一组字符和数字的对应关系,使它们互相替换,并且替换后的数字能够满足等式.这个字符等式是Google公司能力倾向测试实验室的一道题目,这种题目主要考察人的逻辑推导能力和短期记忆能力,通常棋下的好的人解决这类问题会更得心应手一些(飞行棋例外).此类型的题目有很多变种,各种编程比赛中常常能见到它们的身影.比如2005年的G

2015年华为校招机试题和代码实现(分解字符串,拼音转数字,去除重复字符并排序,等式变换)

再来一套2015年的华为机试题. 第一题(60分): 按要求分解字符串,输入两个数M,N:M代表输入的M串字符串,N代表输出的每串字符串的位数,不够补0.例如:输入2,8, "abc" ,"123456789",则输出为"abc00000","12345678","90000000" 分析思路: 容易题 1.获得字符串的长度length后,判断与要输出位数N的大小,大于N的话,直接printf前N位字符,然

CODEVS——T 1404 字符串匹配

http://codevs.cn/problem/1404/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题解 查看运行结果 题目描述 Description 给你两个串A,B,可以得到从A的任意位开始的子串和B匹配的长度.给定K个询问,对于每个询问给定一个x,求出匹配长度恰为x的位置有多少个.N,M,K<=200000 输入描述 Input Description 第一行三个数 N,M,K,表示A的长度.B的长度和询问数.第二行为串A.第三行为串B.接

使用数字进行字符遍历

有些时候使用数字进行遍历,然后将数字转化成需要的进制数,再将进制数对应成需要的字符是一种非常有效的方法. 如: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立. 1 2 3 4 5 6 7 8 9 = X 比如: 12-34+5-67+89 = 5 1+23+4-5+6-7-8-9 = 5 请编写程序,统计满足输入整数的所有整数个数. 输入: 正整数,等式右边的数字 输出: 使该等式成立的个数 样例输入:5 样例输出:21 结题思路:每两个数字之间的空格都有三种选项:

[codevs 1306]广播操的游戏(Trie)

题目:http://codevs.cn/problem/1306/ 分析:题意一看就知道就是要求Trie有多少个节点.但是如果每次单独取原串的所有子串加入Trie会超时,为什么呢?比方说AAABBBCCC,假设这样的一些串,A,AB,ABB,ABBB,ABBBC,ABBBCC,ABBBCCC,如果单独加入,那么它们的前缀都要重新查找,很浪费时间.考虑子串[l,r]和[l,r+1],完全可以在弄完[l,r]后继续第r+1个字符,就弄完了[l,r+1]. 具体的,按一定的顺序取子串: [1,1] [

【CodeVS 2083】Cryptcowgraphy 解密牛语

http://codevs.cn/problem/2083/ 奶牛搜索题.我加了如下剪枝: 1.用字符串hash判重.注意判重时也要对字符串长度判重,否则会出现两个字符串长度不同但hash值相同的情况,非常容易被卡hash. 2.先枚举O,再枚举C,W.枚举W时从后往前枚举.从网上的题解里看到的,具体为什么我也不知道(捂脸). 3.对于所有的C,O,W字母可以将字符串切成好几段,但是无论我们怎么交换C-O之间和O-W之间的字符串,这些小段字符串是不会被分开的.所以对于每一个状态我们判断所有C,O

破损的键盘(codevs 4650)

题目描述 Description 有一天,你需要打一份文件,但是你的键盘坏了,上面的"home"键和"end"键会时不时地按下,而你却毫不知情,甚至你都懒得打开显示器,当你打开显示器之后,出现在你的面前的是一段悲剧的文本. 输入描述 Input Description 输入只有一行,即这份文件,这份文件只包含小写字母和'['以及']',用'['代替"home"键,用']'代替"end"键. 输出描述 Output Descri

codevs 1506 传话 题解

Codevs 1506传话 题解 1506 传话--这个题目的解法很多,你能想到几种? 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 白银 Silver 题解 题目描述 Description 一个朋友网络,如果a认识b,那么如果a第一次收到某个消息,那么会把这个消息传给b,以及所有a认识的人. 如果a认识b,b不一定认识a. 所有人从1到n编号,给出所有"认识"关系,问如果i发布一条新消息,那么会不会经过若干次传话后,这个消息传回给了i,1<=i<=n