Pairs of Integers
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 4133   Accepted: 1062

Description

You are to find all pairs of integers such that their sum is equal to the given integer number N and the second number results from the first one by striking out one of its digits. The first integer always has at least two digits and starts with a non-zero digit. The second integer always has one digit less than the first integer and may start with a zero digit.

Input

The input file consists of a single integer N (10 <= N <= 10^9).

Output

On the first line of the output file write the total number of different pairs of integers that satisfy the problem statement. On the following lines write all those pairs. Write one pair on a line in ascending order of the first integer in the pair. Each pair must be written in the following format:

X + Y = N

Here X, Y, and N, must be replaced with the corresponding integer numbers.
There should be exactly one space on both sides of '+' and '=' characters.

Sample Input

302

Sample Output

5
251 + 51 = 302
275 + 27 = 302
276 + 26 = 302
281 + 21 = 302
301 + 01 = 302

Source

 

【题意】

给出一个数N,求X+Y = N的所有数对(X,Y),X,Y有如下要求,Y是X这个数删除一位所得到的数,X不能含有前导0,但是Y可以含有前导0.

【分析】

将数分三段,可以把X看成三部分:HSL,高位H,低位L,中间被strike掉的位S

所以Y 就是HL

X = (H*10 + S)*10^i + L, (i = 0, 1, 2 ... 最多log10(N),i代表L是几位数)

Y = H*10^i + L

X + Y = (H*11 + S) * 10^i + 2*L = N

N/(10^i) = (11H+S) + 2L/(10^i),其中2L/(10^i)只可能为0和1,再加上i的不到10种取值,共20种不到的组合
 

所以我们通过枚举L的值,来推导出H和S。

当N是奇数的时候,只可能是删除X的最后一位得到,(原因是如果L存在,则2*L%(10^i)取余

是N的后i位,因为2*L是偶数,所以N必然四偶数)。此时变成H*11 + S = N

由于S是一个数字,其值只能是0~9,故当N%11 != 10的时候是有解的。

1.N是奇数,N%11 != 10,有一个解。

2.N是偶数,还是需要考虑删除的是最后一位的情况,该情形和奇数的是一样的。

3.当枚举L的时候,又分为两种情况,2*L有进位,和2*L无进位,

即(2*L)%(10^i) = N%(10^i)

举个例子吧:

假设L是一位数,发现N的末尾是2,

则我们可以猜测的是,L = 1, 2*L = 2, 2*L无进位

然而L = 6,也是满足条件的,2*L = 12, 2*L%(10^i) = 2,即2*L向前进了1,其余数为2.

 

最后这样求解还可能存在重复的结果,所以我们map去一下重

 


【代码】

#include<map>
#include<cstdio>
#include<iomanip>
#include<iostream>
using namespace std;
int n,H,S,L,X;map<int,int>res,ri;
int main(){
cin>>n;
for(int i=0,I=1;I<=n;i++,I*=10){
if(n%I%2) continue;
H=n/I/11;
S=n/I%11;
L=n%I/2;
if(S<=9){
X=(H*10+S)*I+L;
if(H+S) res[X]=H*I+L;
ri[X]=i;
}
L=(n%I+I)/2;
S=n/I%11-1;
if(S>=0&&L){
X=(H*10+S)*I+L;
if(H+S) res[X]=H*I+L;
ri[X]=i;
}
}
cout<<res.size()<<endl;
for(map<int,int>::iterator it=res.begin();it!=res.end();it++)
cout<<it->first<<" + "<<setw(ri[it->first])<<setfill('0')<<it->second<<" = "<<n<<endl;
return 0;
}
 
 

 

POJ 1117 Pairs of Integers的更多相关文章

  1. Pairs of Integers

    Pairs of Integers You are to find all pairs of integers such that their sum is equal to the given in ...

  2. poj 2239 Selecting Courses (二分匹配)

    Selecting Courses Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8316   Accepted: 3687 ...

  3. OpenJudge/Poj 1207 The 3n + 1 problem

    1.链接地址: http://bailian.openjudge.cn/practice/1207/ http://poj.org/problem?id=1207 2.题目: 总时间限制: 1000m ...

  4. OpenJudge/Poj 1125 Stockbroker Grapevine

    1.链接地址: http://poj.org/problem?id=1125 http://bailian.openjudge.cn/practice/1125 2.题目: Stockbroker G ...

  5. POJ 2718 Smallest Difference(最小差)

     Smallest Difference(最小差) Time Limit: 1000MS    Memory Limit: 65536K Description - 题目描述 Given a numb ...

  6. poj 2284 That Nice Euler Circuit 解题报告

    That Nice Euler Circuit Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 1975   Accepted ...

  7. 【POJ】1523 SPF(割点)

    http://poj.org/problem?id=1523 太弱... too weak.. 割点我都还要看书和看题解来写..果然是写不出么.. 割点就那样求,然后分量直接这个节点有多少子树就有子树 ...

  8. POJ 1125 Stockbroker Grapevine【floyd简单应用】

    链接: http://poj.org/problem?id=1125 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...

  9. Poj 1125 Stockbroker Grapevine(Floyd算法求结点对的最短路径问题)

    一.Description Stockbrokers are known to overreact to rumours. You have been contracted to develop a ...

随机推荐

  1. u3d加载外部视屏

    u3d的外部加载视屏,采用www方式,可以使用gui播放,也可以绑定到gameobject上作为动态材质使用,不过目前只支持.ogg格式,需要转... using UnityEngine;using ...

  2. Java对象序列化给分布式计算带来的方便

    什么时候使用序列化: 一:对象序列化可以实现分布式对象.主要应用例如:RMI要利用对象序列化运行远程主机上的服务,就像在本地机上运行对象时一样.二:对象序列化不仅保留一个对象的数据,而且递归保存对象引 ...

  3. 树莓派获取ip地址发送到邮箱

    公网 ip.sh curl http://members.3322.org/dyndns/getip >>/email/ip.log python /email/mail.py ##### ...

  4. GCT之数学公式(微积分)

  5. Java学习之——Java Serializable

    1.什么是Serializable接口? http://en.wikipedia.org/wiki/Serialization Java 提供了一种对象序列化的机制,该机制中,一个对象可以被表示为一个 ...

  6. js提取新浪邮箱的信用卡

    js提取用户新浪邮箱中的信用卡信息,是js非nodejs. 对比py,之前就做不好,出现了复杂点选验证码.js的开发速度只需要py的三分之一,甚至十分之一. js在客户端执行,py在后端执行,py要实 ...

  7. python连接mysql数据库封装

    源码: import pymysql class MysqlConnect(object): # 魔术方法, 初始化, 构造函数 def __init__(self, host, user, pass ...

  8. php根据地理坐标获取国家、省份、城市,及周边数据类

    功能:当App获取到用户的地理坐标时,可以根据坐标知道用户当前在那个国家.省份.城市,及周边有什么数据. 原理:基于百度Geocoding API 实现,需要先注册百度开发者,然后申请百度AK(密钥) ...

  9. VSCode------搭建.net core 2.0,并配置到IIS服务器

    前奏 安装VSCode最新版: https://code.visualstudio.com/ 安装window server hosting,发布和部署到IIS使用: https://www.micr ...

  10. jackson 转换 enum 类型

    REST API 接口要求 requster json 的 lifeCycle 域只能填 YOUNG, OLD,对于其他的 lifeCycle,都要给 requester 返回 bad request ...