Reversion Count

点击打开链接

Description:

There is a positive integer X, X's reversion count is Y. For example, X=123, Y=321; X=1234, Y=4321. Z=(X-Y)/9, Judge if Z is made up of only one number(0,1,2...9), like Z=11,Z=111,Z=222,don't consider '+'and '-'.

Input:

Input contains of several test cases. Each test case only contains of a number X, L is the length of X. ( 2 <= L < 100)

Output:

Output “YES”or “NO”.

样例输入

10
13

样例输出

YES
YES

题目来源

2018 ACM-ICPC 中国大学生程序设计竞赛线上赛

解法一:

首先 一个数n与他反序数的差的绝对值,一定是9的倍数。证明如下:

设四位数 ABCD 他的反序数是DBCA

ABCD-DCBA=(1000*A+100*B+10*C+D)-(1000*D+100*C+10*B+A)

=(1000-1)*A+(100-10)*B-(100-10)*C-(1000-1)*D

=999*A+90*B-90*C-999*D

=(111*A+10*B-10*C-111*D)*9

再设五位数 ABCDE 他的反序数是 EDCBA

ABCDE-EDCBA=(10000*A+1000*B+100*C+10*D+E)-(10000*E+1000*D+100*C+10*B+A)

=9999*A+990*B+0*C-990*D-9999*E

=(1111*A+110*B-110*D-1111*E)*9

对于任一数都可以按此方法证明。

现在我们可以观察到 要想使最后结果全由同一个数字组成就取决于 除第一位与最后一位 剩余所有对称位置的数的值是否相等,若相等则一定是1,11,111,1111...的倍数,不等则一定不是。

如四位数ABCD, 111*A-111*D的结果一定是111的倍数,要使最后结果也是1,11,111,1111...的倍数那么10*B-10*C=10*(B-C)的结果一定要是0(你说B-C的结果可能是11的倍数(除0)???)

五位数 ABCDE, 1111*A-1111*E的结果一定是1111的倍数,注意观察到 凡是有奇数位的数最中间的那个数最后一定被消掉了,对于ABCDE来说就是C最后被消掉了,所以最后一定要(110*B-110*D)=(B-D)*110的值为0

另外1到3位数可以直接输出YES,因为他们的结果都是1位数

打表找规律代码

#include<bits/stdc++.h>
using namespace std;
int rev(int x){int t = 0;int value = 0;while (x / 10){value = 10 * value + x % 10;x /=  10;}return value*10 + x;
}
int main()
{int x,y,z;for(x=0;x<100000;x++){y=rev(x);z=(x-y)/9;printf("%d     ",x);z=abs(z);if(z<90)printf("YES\n");else{set<int> s;s.clear();while(z){s.insert(z%10);z/=10;}if(s.size()==1)printf("YES\n");else    printf("NO\n");}}return 0;
}

AC代码

#include<stdio.h>
#include<string.h>char str[110];int main()
{while(~scanf("%s",str)){int l=strlen(str);if(l<=3){printf("YES\n");continue;}int flag=1;for(int i=1;i<=l/2-1;i++){if(str[i]!=str[l-1-i]) flag=0;}if(flag) printf("YES\n");else printf("NO\n");}return 0;
}

解法二:

直接采用大数相加减然后模拟除法

JAVA

import java.math.BigInteger;
import java.util.Scanner;
import java.io.*;
public class Main
{
public static void main(String args[])
{
Scanner cin = new Scanner(System.in);
while(cin.hasNext())
{
BigInteger x,y,z,xx;
x=cin.nextBigInteger();
xx=x;
y=BigInteger.ZERO;
z=BigInteger.ZERO;
BigInteger n,k;
n=BigInteger.ZERO;
k=BigInteger.ZERO;
while(x.compareTo(BigInteger.valueOf(0))!=0)
{
n=x.mod(BigInteger.valueOf(10));
y=y.multiply(BigInteger.valueOf(10));
y=y.add(n);
x=x.divide(BigInteger.valueOf(10));
}
z=xx.subtract(y);
z=z.abs();
z=z.divide(BigInteger.valueOf(9));
n=z.mod(BigInteger.valueOf(10));
z=z.divide(BigInteger.valueOf(10));
k=n;
// System.out.println(n);
// System.out.println(k);
int f=1;
while(z.compareTo(BigInteger.valueOf(0))!=0)
{
n=z.mod(BigInteger.valueOf(10));
if(k.compareTo(n)!=0)
{
f=0;
break;
}
z=z.divide(BigInteger.valueOf(10));
}
if(f==1)System.out.println("YES");
else System.out.println("NO");
}
}
} 

C++

计蒜客 Reversion Count相关推荐

  1. 计蒜客 -- 常用STL题解

    1.计蒜客 – 打印锯齿矩阵 问题描述 锯齿矩阵是指每一行包含的元素个数不相同的矩阵,比如: 3 5 2 6 1 2 3 4 1 6 2 7 读入若干对整数 (x,y),表示在第 x 行的末尾加上一个 ...

  2. 计蒜客 挑战难题 爬楼梯

    计蒜客 挑战难题 爬楼梯 假设你现在正在爬楼梯,楼梯有n级.每次你只能爬1级或者2级,那么你有多少种方法爬到楼梯的顶部? 格式: 第一行输入一个数n(n<=50),代表楼梯的级数. 接下来一行输 ...

  3. 无脑博士的试管们java_计蒜客 无脑博士和他的试管们

    标签: 无脑博士有三个容量分别是A,B,C升的试管,A,B,C分别是三个从1到20的整数,最初,A和B试管都是空的,而C试管是装满硫酸铜溶液的.有时,无脑博士把硫酸铜溶液从一个试管倒到另一个试管中,直 ...

  4. 最短路(遍历边)计蒜客—DD坐地铁

    题目: C 城有 n 个站点, m 条双向地铁,每条地铁有一个 companyicompany_icompanyi​表示它的公司,如果连续乘坐同一家公司的地铁只要花 1元钱就好.DD现在想出门找萨摩耶 ...

  5. K - Triangle 计蒜客 - 42405

    K - Triangle 计蒜客 - 42405 题意: 给你一个三角形的三点,再给你三角形边上一个点,让你求另一个点(也要在三角形上),使得平分三角形的面积 题解: 计算几何 三角形的三边ab,ac ...

  6. H - Prince and Princess 计蒜客 - 42402

    H - Prince and Princess 计蒜客 - 42402 题意: 你现在要寻找公主,有三种人,第一种是说真话的人(至少为1,因为公主是说真话的人),第二种人是只会说假话的,第三种是胡说八 ...

  7. C - Digital Path 计蒜客 - 42397 05-29

    C - Digital Path 计蒜客 - 42397 题意: 题意就是给出一个n ∗ m的数字矩阵每个矩阵元素之间只能上下左右走,而且下一个位置必须比当前位置的数字大1,入口和出口必须数边缘元素, ...

  8. 计蒜客可以做计算机编程吗,如果你的编程能力不足以支撑你成为工程师的野心,不妨到计蒜客上学学看...

    在人才招聘领域存在这样一个怪圈,高校每年都说是最难就业年.人才过剩,而对于企业HR来说永远都招不到称心如意的人才.这个怪圈在"计蒜客"创始人俞昊然看来,主要是因为当今高校的教学资源 ...

  9. 计蒜客 - T1012 A*B问题

    计蒜客 - T1012 A*B问题 相信你已经学会 A+B 问题了,那么问题又来了- 输入两个正整数 A 和 B ,求 A×B. 输入格式 一行,包含两个正整数 A 和 B,中间用单个空格隔开. 1≤ ...

最新文章

  1. Operation not allowed after ResultSet closed--操作mysql数据库
  2. Oracle优化06-Hint
  3. 官方一步解决各种Windows更新问题
  4. exchange2013-Database is mandatory on UserMailbox..
  5. python自动化部署工具_Python + Allure(报告)+ Jenkins(持续集成)接口自动化测试环境搭建...
  6. Android localsocket 的基础和使用实践: 01
  7. matlab 高级函数
  8. 回顾---对教师提出的5个问题的回答及个人感悟
  9. 用包管理python代码,提高开发效率
  10. Mirage学习笔记
  11. Bailian2939 玩游戏【模拟】
  12. msvcr100.dll不存在
  13. linux 截屏_如何在Linux上截图
  14. Confusing conditions about MySQL script
  15. Android Q版本实现自动连接WiFi
  16. 千年古刹南普陀寺义工十年发展已逾6000人
  17. 点击按钮复制文本框内容
  18. 【笔试——腾讯2021实习笔试题第二次2021.4.4】第3题 n人高空过钢索
  19. git squash
  20. java计算机毕业设计ssm大学生心理健康平台

热门文章

  1. 【软件工程】关于计算机的一些问答与思考
  2. eclipse官网下载详细指南
  3. 【MySql】mysql-5.7.20-winx64安装配置
  4. python之路_文件操作解析
  5. Ajax-goahead局部刷新页面
  6. C#方式操作Cookie
  7. [eBook] SQL 2008
  8. mysql8中文排序_mysql中utf8编码的中文字段按拼音排序
  9. 选择嵌套_Python if语句嵌套(入门必读)
  10. windows php postgre,windows下php不支持pgsql的解决方法